User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

dbdumper:validation [2019-10-01 10:57] (current)
ziggi created
Line 1: Line 1:
 +
 +<code perl >
 +#​!/​usr/​bin/​env perl
 +
 +package aAgentI;
 +
 +use strict;
 +use warnings;
 +use Mojo::​UserAgent;​
 +use Mojo::JSON qw(encode_json decode_json);​
 +use Mojo::Util qw(dumper);
 +
 +sub new {
 +    my ($class, $host, $login, $password) = @_;
 +    my $ua = Mojo::​UserAgent->​new;​
 +    my $self = {
 +        host => $host,
 +        login => $login,
 +        password => $password,
 +        port => '​8184',​
 +        ua => $ua
 +    };
 +    bless $self, $class;
 +    return $self;
 +}
 +
 +sub ua {
 +    my ($self, $ua) = @_;
 +    return $self->​{ua} unless $ua;
 +    $self->​{ua} = $ua;
 +    $self;
 +}
 +
 +sub host {
 +    my ($self, $host) = @_;
 +    return $self->​{host} unless $host;
 +    $self->​{host} = $host;
 +    $self;
 +}
 +
 +sub login {
 +    my ($self, $login) = @_;
 +    return $self->​{login} unless $login;
 +    $self->​{login} = $login;
 +    $self;
 +}
 +
 +sub password {
 +    my ($self, $password) = @_;
 +    return $self->​{password} unless $password;
 +    $self->​{password} = $password;
 +    $self;
 +}
 +
 +sub port {
 +    my ($self, $port) = @_;
 +    return $self->​{port} unless $port;
 +    $self->​{port} = $port;
 +    $self;
 +}
 +
 +
 +sub rpc {
 +    my ($self, ​ $call, %args) = @_;
 +    return undef unless $call;
 +    return undef unless $call =~ /^\//;
 +
 +    my $host = $self->​host;​
 +    my $login = $self->​login;​
 +    my $password = $self->​password;​
 +    my $port = $self->​port;​
 +
 +    my $url = "​https://​$login:​$password\@$host:​$port$call";​
 +    $url .= "?"​ if %args;
 +    foreach my $key (sort keys %args) {
 +        my $value = $args{$key};​
 +        next unless $value;
 +        $url .= "&​$key=$value";​
 +    }
 +
 +    $url =~ s/​\?&/​\?/;​
 +    my $res;
 +    eval {
 +        my $tx = $self->​ua->​get($url);​
 +        $res = $tx->​result->​body;​
 +    };
 +    return undef if $@;
 +    my $j = decode_json($res);​
 +    return $j if $j;
 +    undef;
 +}
 +
 +
 +sub alive {
 +    my $self = shift;
 +    my $res = $self->​rpc('/​hello'​);​
 +    return undef unless $res;
 +    return 1 if  $res->​{'​message'​} eq '​hello';​
 +    return undef;
 +}
 +
 +sub db_list {
 +    my $self = shift;
 +    $self->​rpc('/​db/​list'​);​
 +}
 +
 +sub db_profile {
 +    my ($self, $name) = @_;
 +    $self->​rpc('/​db/​profile',​ name => $name);
 +}
 +
 +sub db_create {
 +    my ($self, $name) = @_;
 +    $self->​rpc('/​db/​create',​ name => $name);
 +}
 +
 +sub db_copy {
 +    my ($self, $name, $new_name) = @_;
 +    $self->​rpc('/​db/​copy',​ name => $name, new_name => $new_name);
 +}
 +
 +sub db_drop {
 +    my ($self, $name) = @_;
 +    $self->​rpc('/​db/​drop',​ name => $name);
 +}
 +
 +sub db_rename {
 +    my ($self, $name, $new_name) = @_;
 +    $self->​rpc('/​db/​rename',​ name => $name, new_name => $new_name);
 +}
 +
 +sub db_owner {
 +    my ($self, $name) = @_;
 +    $self->​rpc('/​db/​drop',​ name => $name);
 +}
 +
 +
 +sub user_list {
 +    my $self = shift;
 +    $self->​rpc('/​user/​list'​);​
 +}
 +
 +sub user_profile {
 +    my ($self, $name) = @_;
 +    $self->​rpc('/​user/​profile',​ name => $name);
 +}
 +
 +sub user_create {
 +    my ($self, $name, $password) = @_;
 +    $self->​rpc('/​user/​create',​ name => $name, password => $password);
 +}
 +
 +sub user_drop {
 +    my ($self, $name) = @_;
 +    $self->​rpc('/​user/​drop',​ name => $name);
 +}
 +
 +sub user_rename {
 +    my ($self, $name, $new_name) = @_;
 +    $self->​rpc('/​user/​rename',​ name => $name, new_name => $new_name);
 +}
 +
 +sub user_password {
 +    my ($self, $name, $password) = @_;
 +    $self->​rpc('/​user/​password',​ name => $name, password => $password);
 +}
 +
 +sub db_dump {
 +    my ($self, $name, $store, $login, $password, $cb, $job_id, $magic) = @_;
 +    $self->​rpc('/​db/​dump',​
 +                        name => $name,
 +                        store => $store,
 +                        login => $login,
 +                        password => $password,
 +                        cb => $cb,
 +                        job_id => $job_id,
 +                        magic => $magic);
 +}
 +
 +sub db_restore {
 +    my ($self, $store, $login, $password, $file, $new_name, $cb, $job_id, $magic) = @_;
 +    $self->​rpc('/​db/​restore',​
 +                        store => $store,
 +                        login => $login,
 +                        password => $password,
 +                        file => $file,
 +                        new_name => $new_name,
 +                        cb => $cb,
 +                        job_id => $job_id,
 +                        magic => $magic);
 +}
 +
 +
 +1;
 +
 +use strict;
 +use warnings;
 +use Mojo::Util qw(dumper);
 +use Scalar::​Util '​blessed';​
 +
 +my $a = aAgentI->​new("​pgdbxxxx.xxxxx.us",​ "​xxxxxx",​ "​xxxxxxxxxxx"​);​
 +#print ref $a;
 +
 +
 +#no strict '​refs';​
 +#print dumper @{'​aAgentI'​ . '::'​};​
 +
 +
 +#my $a = aAgentI->​new("​thx.xxxxxx.org",​ "​master",​ "​password"​);​
 +
 +print dumper $a->​rpc('/​hello'​);​
 +
 +#print dumper $a->​db_list;​
 +#print dumper $a->​db_create('​asterisk_copy'​);​
 +#print dumper $a->​db_profile('​asterisk_copy'​);​
 +
 +##print dumper $a->​db_profile('​kpi_xxx1'​)->​{profile};​
 +
 +#print dumper $a->​db_drop('​kpi_xxxx_copy'​);​
 +#print dumper $a->​db_copy('​kpixxx',​ '​kpi_xxxx_copy'​);​
 +#print dumper $a->​db_copy('​kpixxx',​ '​kpi_xxx_copy'​);​
 +
 +#print dumper $a->​db_profile('​kpi_xxx'​);​
 +#print dumper $a->​db_profile('​kpi_xxxx_copy'​);​
 +#print dumper $a->​db_drop('​kpi_xxx_copy'​);​
 +#print dumper $a->​db_drop('​asterisk_copy'​);​
 +#print dumper $a->​db_drop('​asterisk_copy_2'​);​
 +
 +#print dumper $a->​db_create('​asterisk_copy'​);​
 +#print dumper $a->​db_copy('​asterisk_copy',​ '​asterisk_copy_2'​);​
 +#print dumper $a->​db_profile('​asterisk_copy_2'​);​
 +#print dumper $a->​db_drop('​asterisk_copy_2'​);​
 +#print dumper $a->​db_profile('​asterisk_copy_2'​);​
 +
 +#print dumper $a->​user_profile('​asterisk'​);​
 +#print dumper $a->​user_create('​asterisk_2',​ '​123456'​);​
 +#print dumper $a->​user_profile('​asterisk_2'​);​
 +#print dumper $a->​user_rename('​asterisk_2',​ '​asterisk_222'​);​
 +#print dumper $a->​user_profile('​asterisk_222'​);​
 +#print dumper $a->​user_drop('​asterisk_222'​);​
 +#print dumper $a->​user_drop('​asterisk_2'​);​
 +
 +#print dumper $a->​db_profile('​asterisk_copy'​);​
 +#print dumper $a->​db_dump('​asterisk',​ '​th.xxxx.org',​ '​master',​ '​password',​ '​th.xxxx.org',​ '​123',​ '​magic'​);​
 +
 +#print dumper $a->​db_restore( '​thx.xxxxx.org',​ '​master',​ '​password',​
 +#                                     '​asterisk_copy--20171221-181222-MSK--127.0.0.1.sqlz',​
 +#                                      '​asterisk_copy333'​ , '​thx.xxxxx.org',​ '​123',​ '​magic'​);​
 +
 +
 +#my $list = $a->​db_list->​{list};​
 +
 +#foreach my $pro (@$list) {
 +#    my $name = $pro->​{name};​
 +#    print dumper $a->​db_dump($name,​ '​thx.xxxxx.org',​ '​login',​ '​password',​ '​thx.xxxx.org',​ '​123',​ '​magic'​);​
 +#}
 +
 +#print dumper $a->​db_dump('​asterisk_copy',​ '​thx.xxxx.org',​ '​login',​ '​password',​ '​thx.xxxx.org',​ '​123',​ '​magic'​);​
 +
 +#my $a = aAgentI->​new("​pgdb-xxxx.lazurit.us",​ "​master",​ "​password"​);​
 +#if ($a->​alive) {
 +#    my $list = $a->​db_list->​{list};​
 +#    foreach my $db (@$list) {
 +#        my $name = $db->​{name};​
 +#        my $size = $db->​{size};​
 +#        my $owner = $db->​{owner};​
 +#        my $nb = $db->​{numbackends};​
 +#        print "$name $size $owner $nb\n";​
 +#    }
 +#}
 +
 +#EOF
 +</​code>​
 +
 +
 +<code perl astorei.pl>​
 +#​!/​usr/​bin/​env perl
 +
 +#​--------------
 +#--- STOREI ---
 +#​--------------
 +
 +package aStoreI;
 +
 +use strict;
 +use warnings;
 +use Mojo::​UserAgent;​
 +use Mojo::JSON qw(encode_json decode_json);​
 +use Mojo::Util qw(dumper);
 +
 +sub new {
 +    my ($class, $host, $login, $password) = @_;
 +    my $ua = Mojo::​UserAgent->​new;​
 +
 +    $ua->​max_response_size(10*1024*1024*1024);​
 +    $ua->​inactivity_timeout(60);​
 +    $ua->​connect_timeout(60);​
 +    $ua->​request_timeout(2*60*60);​
 +
 +    my $self = {
 +        host => $host,
 +        login => $login,
 +        password => $password,
 +        port => '​8184',​
 +        ua => $ua
 +    };
 +    bless $self, $class;
 +    return $self;
 +}
 +
 +sub ua {
 +    my ($self, $ua) = @_;
 +    return $self->​{ua} unless $ua;
 +    $self->​{ua} = $ua;
 +    $self;
 +}
 +
 +sub host {
 +    my ($self, $host) = @_;
 +    return $self->​{host} unless $host;
 +    $self->​{host} = $host;
 +    $self;
 +}
 +
 +sub login {
 +    my ($self, $login) = @_;
 +    return $self->​{login} unless $login;
 +    $self->​{login} = $login;
 +    $self;
 +}
 +
 +sub password {
 +    my ($self, $password) = @_;
 +    return $self->​{password} unless $password;
 +    $self->​{password} = $password;
 +    $self;
 +}
 +
 +sub port {
 +    my ($self, $port) = @_;
 +    return $self->​{port} unless $port;
 +    $self->​{port} = $port;
 +    $self;
 +}
 +
 +
 +sub rpc {
 +    my ($self, ​ $call, %args) = @_;
 +    return undef unless $call;
 +    return undef unless $call =~ /^\//;
 +
 +    my $host = $self->​host;​
 +    my $login = $self->​login;​
 +    my $password = $self->​password;​
 +    my $port = $self->​port;​
 +
 +    my $url = "​https://​$login:​$password\@$host:​$port$call";​
 +    $url .= "?"​ if %args;
 +    foreach my $key (sort keys %args) {
 +        my $value = $args{$key};​
 +        next unless $value;
 +        $url .= "&​$key=$value";​
 +    }
 +
 +    $url =~ s/​\?&/​\?/;​
 +    my $res;
 +    eval {
 +        my $tx = $self->​ua->​get($url);​
 +        $res = $tx->​result->​body;​
 +    };
 +    return undef if $@;
 +    my $j = decode_json($res);​
 +}
 +
 +
 +sub alive {
 +    my $self = shift;
 +    my $res = $self->​rpc('/​hello'​);​
 +    return 1 if  $res->​{'​message'​} eq '​hello';​
 +    return undef;
 +}
 +
 +sub data_list {
 +    my $self = shift;
 +    $self->​rpc('/​data/​list'​);​
 +}
 +
 +sub data_profile {
 +    my ($self, $name) = @_;
 +    $self->​rpc('/​data/​profile',​ name => $name);
 +}
 +
 +sub data_delete {
 +    my ($self, $name) = @_;
 +    $self->​rpc('/​data/​delete',​ name => $name);
 +}
 +
 +sub store_profile {
 +    my ($self) = @_;
 +    $self->​rpc('/​store/​profile'​);​
 +}
 +
 +
 +sub data_get {
 +    my ($self, $name, $dir) = @_;
 +
 +    return undef unless $dir;
 +    return undef unless -w $dir;
 +
 +    my $host = $self->​host;​
 +    my $login = $self->​login;​
 +    my $password = $self->​password;​
 +    my $port = $self->​port;​
 +
 +    $ENV{MOJO_TMPDIR} = $dir;
 +
 +    my $tx = $self->​ua->​get("​https://​$login:​$password\@$host:​$port/​data/​get?​name=$name"​);​
 +    my $res = $tx->​result;​
 +
 +    my $type = $res->​headers->​content_type || '';​
 +    my $disp = $res->​headers->​content_disposition || '';​
 +    my $file = "​$dir/​$name";​
 +
 +    if ($type =~ /name=/ or $disp =~ /​filename=/​) {
 +        my ($filename) = $disp =~ /​filename=\"​(.*)\"/;​
 +        rename $file, "​$file.bak"​ if -r $file;
 +        $res->​content->​asset->​move_to($file);​
 +    }
 +    return undef unless -r $file;
 +    $file;
 +}
 +
 +sub data_put {
 +    my ($self, $file) = @_;
 +
 +    return undef unless $file;
 +    return undef unless -r $file;
 +
 +    my $host = $self->​host;​
 +    my $login = $self->​login;​
 +    my $password = $self->​password;​
 +    my $port = $self->​port;​
 +
 +    my $url = "​https://​$login:​$password\@$host:​$port/​data/​put";​
 +    my $res;
 +    eval {
 +        my $tx = $self->​ua->​post($url => form => {data => { file => $file } });
 +        $res = $tx->​result->​body;​
 +    };
 +    return undef if $@;
 +    my $j = decode_json($res);​
 +}
 +
 +sub dump_clean {
 +    my ($self, $pattern, $remain) = @_;
 +    $self->​rpc('/​dump/​clean',​ pattern => $pattern, remain => $remain);
 +}
 +
 +1;
 +
 +use strict;
 +use warnings;
 +use Mojo::Util qw(dumper);
 +
 +
 +my $s = aStoreI->​new("​dbstorexx.xxxx.us",​ "​xxxxxx",​ "​xxxxxxxx"​);​
 +print dumper $s->​data_list;​
 +#print dumper $s->​dump_clean('​hrm_auto_new--*',​ 1);
 +#print dumper $s->​data_put('​data.bin'​);​
 +#print dumper $s->​data_profile('​data.bin'​);​
 +print dumper $s->​data_get('​_dummy--20180901-001004-MSK--local.sqlz',​ '​.'​);​
 +#print dumper $s->​data_delete('​data.bin'​);​
 +#print dumper $s->​data_profile('​data.bin'​);​
 +#print dumper $s->​store_profile;​
 +
 +#EOF
 +</​code>​
 +