parent
26f2e5b6c1
commit
21eae2b82e
@ -0,0 +1,106 @@
|
||||
package NGCP::Schema::Result::messages_custom;
|
||||
use Scalar::Util qw(blessed);
|
||||
use base qw/DBIx::Class::Core/;
|
||||
|
||||
our $VERSION = '2.007';
|
||||
|
||||
__PACKAGE__->load_components(
|
||||
"InflateColumn::DateTime",
|
||||
"Helper::Row::ToJSON",
|
||||
"+NGCP::Schema::InflateColumn::DateTime::EpochMicro",
|
||||
);
|
||||
__PACKAGE__->table_class('DBIx::Class::ResultSource::View');
|
||||
|
||||
__PACKAGE__->table("messages_custom");
|
||||
|
||||
|
||||
__PACKAGE__->add_columns(
|
||||
"id",
|
||||
{
|
||||
data_type => "bigint",
|
||||
extra => { unsigned => 1 },
|
||||
is_auto_increment => 1,
|
||||
is_nullable => 0,
|
||||
},
|
||||
"timestamp",
|
||||
{ data_type => "decimal", is_nullable => 0, size => [17, 6] },
|
||||
"protocol",
|
||||
{
|
||||
data_type => "enum",
|
||||
extra => { list => ["IPv4", "IPv6"] },
|
||||
is_nullable => 0,
|
||||
},
|
||||
"transport",
|
||||
{
|
||||
data_type => "enum",
|
||||
extra => { list => ["UDP", "TCP"] },
|
||||
is_nullable => 0,
|
||||
},
|
||||
"src_ip",
|
||||
{ data_type => "varchar", is_nullable => 0, size => 39 },
|
||||
"dst_ip",
|
||||
{ data_type => "varchar", is_nullable => 0, size => 39 },
|
||||
"src_port",
|
||||
{ data_type => "smallint", extra => { unsigned => 1 }, is_nullable => 0 },
|
||||
"dst_port",
|
||||
{ data_type => "smallint", extra => { unsigned => 1 }, is_nullable => 0 },
|
||||
"payload",
|
||||
{ data_type => "blob", is_nullable => 0 },
|
||||
"method",
|
||||
{
|
||||
accessor => "column_method",
|
||||
data_type => "varchar",
|
||||
is_nullable => 0,
|
||||
size => 20,
|
||||
},
|
||||
"cseq_method",
|
||||
{ data_type => "varchar", is_nullable => 0, size => 16 },
|
||||
"call_id",
|
||||
{ data_type => "varchar", is_nullable => 0, size => 255 },
|
||||
"request_uri",
|
||||
{ data_type => "varchar", is_nullable => 0, size => 255 },
|
||||
"from_uri",
|
||||
{ data_type => "varchar", is_nullable => 0, size => 255 },
|
||||
"caller_uuid",
|
||||
{ data_type => "varchar", is_nullable => 0, size => 255 },
|
||||
"callee_uuid",
|
||||
{ data_type => "varchar", is_nullable => 0, size => 255 },
|
||||
);
|
||||
|
||||
__PACKAGE__->set_primary_key("id");
|
||||
|
||||
for my $col (qw/timestamp/) {
|
||||
if(__PACKAGE__->has_column($col)) {
|
||||
__PACKAGE__->remove_column($col);
|
||||
__PACKAGE__->add_column($col =>
|
||||
{ data_type => "decimal", is_nullable => 0, size => [17, 6], inflate_datetime => 'epoch_micro' }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
sub TO_JSON {
|
||||
my ($self) = @_;
|
||||
return {
|
||||
map { blessed($_) && $_->isa('DateTime') ? $_->datetime : $_ } %{ $self->next::method }
|
||||
};
|
||||
}
|
||||
|
||||
__PACKAGE__->result_source_instance->is_virtual(1);
|
||||
|
||||
__PACKAGE__->result_source_instance->view_definition("
|
||||
SELECT m.* FROM
|
||||
(
|
||||
(
|
||||
SELECT DISTINCT ( call_id )
|
||||
FROM sipstats.messages
|
||||
WHERE caller_uuid LIKE ? OR callee_uuid LIKE ? OR call_id LIKE ?
|
||||
ORDER BY timestamp DESC
|
||||
LIMIT ?, ?
|
||||
)
|
||||
) q JOIN sipstats.messages m ON q.call_id = m.call_id
|
||||
GROUP BY call_id
|
||||
");
|
||||
|
||||
|
||||
1;
|
||||
|
Loading…
Reference in new issue