App-MBUtiny
view release on metacpan or search on metacpan
lib/App/MBUtiny/Collector/Server.pm view on Meta::CPAN
attrs => {
serialize => 1,
},
description => "Get list of files by name",
code => sub {
### CODE:
my $self = shift;
my $q = shift;
my $dbi = $self->dbi;
my $name = $q->param("name") || '';
unless ($name) {
$self->error("The name attribute required!");
$self->{status} = 0;
return HTTP_BAD_REQUEST;
}
my @table = $dbi->list(name => $name);
if ($dbi->error) {
$self->error($dbi->error);
$self->status(0);
return HTTP_INTERNAL_SERVER_ERROR;
}
$self->data({
list => \@table,
});
return HTTP_OK; # HTTP RC
});
=head2 GET /mbutiny/report
curl -v --raw http://localhost/mbutiny/report?start=1561799700
> GET /mbutiny/report HTTP/1.1
> Host: localhost
> User-Agent: curl/7.50.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 31 May 2019 05:41:34 GMT
< Server: Apache/2.4.18 (Ubuntu)
< Connection: close
< Content-Length: 16
< Content-Type: text/plain
<
{
"time" : 0.0012,
"report" : [...],
"status" : 1,
"error" : ""
}
=cut
__PACKAGE__->register_method( # GET /mbutiny/report
name => "report",
method => "GET",
path => "$BASE_URL_PATH_PREFIX/report",
deep => 0,
attrs => {
serialize => 1,
},
description => "Get backup report by start time",
code => sub {
### CODE:
my $self = shift;
my $q = shift;
my $dbi = $self->dbi;
my $start = $q->param("start") || 0;
unless (is_int($start)) {
$self->error("The start attribute is not integer value type!");
$self->{status} = 0;
return HTTP_BAD_REQUEST;
}
my @table = $dbi->report(start => $start);
if ($dbi->error) {
$self->error($dbi->error);
$self->status(0);
return HTTP_INTERNAL_SERVER_ERROR;
}
$self->data({
report => \@table,
});
return HTTP_OK; # HTTP RC
});
=head2 POST /mbutiny
curl -v -d '{ "type": 1, "name": "foo", "file": "foo", "size": 501, "md5": "3a5fb8a1e0564eed5a6f5c4389ec5fa0", "sha1": "22d12324fa2256e275761b55d5c063b8d9fc3b95", "status": 1, "error": "", "comment": "Test external fixup!"}' --raw -H "Content-Typ...
> POST /mbutiny HTTP/1.1
> Host: localhost
> User-Agent: curl/7.50.1
> Accept: */*
> Content-Type: application/json
> Content-Length: 27
>
< HTTP/1.1 200 OK
< Date: Thu, 20 Jun 2019 15:03:34 GMT
< Server: Apache/2.4.18 (Ubuntu)
< Connection: close
< Content-Length: 27
< Content-Type: text/plain; charset=utf-8
<
=cut
__PACKAGE__->register_method( # POST /mbutiny
name => "add",
method => "POST",
path => $BASE_URL_PATH_PREFIX,
deep => 0,
attrs => {
deserialize => 1,
serialize => 1,
},
description => "Add new data",
code => sub {
### CODE:
my $self = shift;
my $q = shift;
my $dbi = $self->dbi;
my $data = $self->data;
lib/App/MBUtiny/Collector/Server.pm view on Meta::CPAN
unless (%args) {
$self->error("No input data!");
$self->status(0);
return HTTP_BAD_REQUEST;
}
$dbi->add(
type => $args{type},
name => $args{name},
file => $args{file},
size => $args{size},
md5 => $args{md5},
sha1 => $args{sha1},
status => $args{status},
error => $args{error},
comment => $args{comment},
addr => $ENV{REMOTE_ADDR},
) or do {
$self->error($dbi->error());
$self->status(0);
return HTTP_INTERNAL_SERVER_ERROR;
};
return HTTP_OK; # HTTP RC
});
=head2 DELETE /mbutiny/NAME
curl -v --raw -X DELETE http://localhost/mbutiny/NAME?file=name&type=1
> DELETE /mbutiny/NAME?file=name HTTP/1.1
> Host: localhost
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 204 No Content
< Date: Fri, 21 Jun 2019 21:40:36 GMT
< Server: Apache/2.4.29 (Ubuntu)
< Connection: close
< Content-Type: text/plain
<
=cut
__PACKAGE__->register_method( # DELETE /mbutiny/NAME
name => "delete",
method => "DELETE",
path => $BASE_URL_PATH_PREFIX,
deep => 1,
attrs => {
serialize => 1,
},
description => "Delete file",
code => sub {
### CODE:
my $self = shift;
my $q = shift;
my $dbi = $self->dbi;
my $name = _get_name_from_path($self->{request_uri} // "");
unless ($name) {
$self->error("Incorrect path! Check backup host name");
$self->status(0);
return HTTP_BAD_REQUEST;
}
my $file = $q->param("file");
unless ($file) {
$self->error("Incorrect file name for delete");
$self->status(0);
return HTTP_BAD_REQUEST;
}
my $type = $q->param("type") // 0;
$dbi->del(
type => $type,
name => $name,
file => $file,
addr => $ENV{REMOTE_ADDR},
) or do {
$self->error($dbi->error());
$self->status(0);
return HTTP_INTERNAL_SERVER_ERROR;
};
return HTTP_NO_CONTENT; # HTTP RC
});
return 1;
}
sub again {
my $self = shift;
$self->SUPER::again;
# Serializer
my $sr = new CTK::Serializer(SERIALIZE_FORMAT, attrs => SR_ATTRS);
unless ($sr->status) {
$self->error(sprintf("Can't create json serializer: %s", $sr->error));
$self->{status} = 0;
}
$self->{sr} = $sr;
# DBI object
my $dbi_conf = $self->config('dbi') || {};
$dbi_conf = {} unless is_hash($dbi_conf);
my $dbi = new App::MBUtiny::Collector::DBI(%$dbi_conf);
$self->log_error($dbi->error) if $dbi->error;
$self->{dbi} = $dbi;
return $self;
}
sub serializer {
my $self = shift;
return $self->{sr};
}
sub dbi {
my $self = shift;
return $self->{dbi};
}
sub middleware {
my $self = shift;
my $q = shift;
( run in 1.122 second using v1.01-cache-2.11-cpan-39bf76dae61 )