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 )