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 )