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], inflate_datetime => 'epoch_micro' }, "min_timestamp", { data_type => "decimal", is_nullable => 0, size => [17, 6], inflate_datetime => 'epoch_micro' }, "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"); 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 min(m.timestamp) as min_timestamp, m.* FROM ( ( SELECT DISTINCT ( call_id ) FROM sipstats.messages WHERE caller_uuid LIKE ? COLLATE utf8_bin OR callee_uuid LIKE ? COLLATE utf8_bin OR call_id LIKE ? COLLATE utf8_bin ORDER BY timestamp DESC LIMIT ?, ? ) ) q JOIN sipstats.messages m ON q.call_id = m.call_id GROUP BY call_id "); 1;