Elive

 view release on metacpan or  search on metacpan

script/elive_query  view on Meta::CPAN

    --debug=n                # 1=some, 2=verbose, 3=verbose + soap
    --dump=yaml              # serialise results as YAML
    --adapter=type-or-class  # E.g. --adapter v3 (Bb::Collaborate::V3)
    -c 'select ....'         # execute command(s), then exit
    -? -help                 # obtain help
    -v -version              # print Elive version

=head1 DESCRIPTION

Simple read-only query shell for Elluminate Live! Manager (ELM).

=head2 Entity Data Queries

This script lets you do simple queries, in a vaguely SQL like manner.
For example:

    % elive_query -user admin https://myserver.com/mysite
    Password: ********
    connecting to https://myserver.com/mysite...ok
    Elive query ... (Elluminate Live! ...)  (c) ... - type 'help' for help

    elive> select loginName,email,firstName,lastName,role from user where loginName like *m* 
    loginName   |email                 |firstName|lastName   |role
    ------------|----------------------|---------|-----------|----
    mr_miyagi   |mr_miyagi@hotmail.com |Pups     |Miyagi     |3
    sthrogmorton|sthrogmorton@gmail.com|Sebastion|Throgmorton|2

    elive>

=head2 Describing Entities

You can also use this script to describe Elive entity structures:

    elive> describe
    usage: describe group|meeting|meetingParameters|participantList|preload|recording|serverDetails|serverParameters|user

    elive> describe meeting
    meeting: Elive::Entity::Meeting:
    meetingId         : pkey Int        
    deleted           : Bool
    end               : HiResDate    -- meeting end time
    facilitatorId     : Str          -- userId of facilitator
    name              : Str          -- meeting name
    password          : Str          -- meeting password
    privateMeeting    : Bool         -- don't display meeting in public schedule
    start             : HiResDate    -- meeting start time

    elive> 

=head1 SEE ALSO

perldoc Elive
L<http://search.cpan.org/dist/Elive/>

=cut

main(@ARGV) unless caller;

sub main {

    local(@ARGV) = @_;

    our $elive_version = ${Elive::VERSION};
    our %entity_collections;
    #
    # this may barf if /dev/tty can't be opened. E.g. when executing from cron
    our $interactive = eval { IO::Interactive::is_interactive() };

    our $term;
    if ($interactive) {
	$term = eval { Term::ReadLine->new('elive shell') }
    }

    my $prompt = "elive> ";
    our $connection;
    my %options;

    our $adapter_class;

    do {
	(my $url, %options) = _getopt();

	my $adapter = $options{adapter} || 'default';
	$adapter_class = {default    => 'Elive::Entity',
			  v3 => 'Bb::Collaborate::V3',
	}->{$adapter};
	$adapter_class ||= $adapter;
	eval "require $adapter_class";
	die $@ if $@;

	our $debug = $options{debug};
	Elive->debug($debug) if defined $debug;
	# debug may also be set via $ENV{ELIVE_DEBUG}
	$debug = Elive->debug;

	$connection = _connect($adapter_class => $url, %options)
	    if $url;
    };

    warn "adapter class: $adapter_class\n" if Elive->debug;

    our @data_classes = $adapter_class->data_classes;
    our %entities;

    foreach my $class (@data_classes) {
	#
	# Make sure we're dealing with well formed DAO classes
	#
	eval "require $class";
	die $@ if $@;

	unless (eval {$class->entity_name}) {
	    warn "Omitting non entity class: $class";
	    next;
	}

	$entities{ lcfirst $class->entity_name } = $class;
	#
	# accept plurals, e.g. 'select * from user' vs 'select * from users'
	#
	if (my $collection_name = $class->collection_name) {



( run in 0.774 second using v1.01-cache-2.11-cpan-5a3173703d6 )