TT#15059 Add mos avg data to call info representation

Change-Id: I28db040b2fd1e823d07649ec369c105ec7ea8b08
changes/95/19195/4
Irina Peshinskaya 8 years ago
parent 1385e29620
commit ef943eb7a8

@ -2306,6 +2306,10 @@ sub calllist_master :Chained('base') :PathPart('calls') :CaptureArgs(0) {
{ name => "call_status", search => 1, title => $c->loc('Status') },
{ name => "start_time", search_from_epoch => 1, search_to_epoch => 1, title => $c->loc('Start Time') },
{ name => "duration", search => 1, title => $c->loc('Duration'), show_total => 'sum' },
{ name => "cdr_mos_data.mos_average", search => 0, title => $c->loc('MOS avg') },
{ name => "cdr_mos_data.mos_average_packetloss", search => 0, title => $c->loc('MOS packetloss') },
{ name => "cdr_mos_data.mos_average_jitter", search => 0, title => $c->loc('MOS jitter') },
{ name => "cdr_mos_data.mos_average_roundtrip", search => 0, title => $c->loc('MOS roundtrip') },
];
push @{ $call_cols }, (
{ name => "call_id", search => 1, title => $c->loc('Call-ID') },
@ -3588,8 +3592,13 @@ sub ajax_calls_out :Chained('calllist_master') :PathPart('list/ajax/out') :Args(
sub ajax_call_details :Chained('master') :PathPart('calls/ajax') :Args(1) {
my ($self, $c, $call_id) = @_;
my $call = $c->model('DB')->resultset('cdr')->search_rs({
id => $call_id,
});
id => $call_id,
},{
join => 'cdr_mos_data',
'+select' => [qw/cdr_mos_data.mos_average cdr_mos_data.mos_average_packetloss cdr_mos_data.mos_average_jitter cdr_mos_data.mos_average_roundtrip/],
'+as' => [qw/mos_average mos_average_packetloss mos_average_jitter mos_average_roundtrip/],
}
);
$c->stash(
template => 'subscriber/call_details.tt',
call => { $call->first->get_inflated_columns } );

@ -160,6 +160,42 @@ has_field 'call_id' => (
},
);
has_field 'mos_average' => (
type => 'Text',
required => 1,
element_attr => {
rel => ['tooltip'],
title => ['MOS average.']
},
);
has_field 'mos_average_packetloss' => (
type => 'Text',
required => 1,
element_attr => {
rel => ['tooltip'],
title => ['MOS average packetloss.']
},
);
has_field 'mos_average_jitter' => (
type => 'Text',
required => 1,
element_attr => {
rel => ['tooltip'],
title => ['MOS average jitter.']
},
);
has_field 'mos_average_roundtrip' => (
type => 'Text',
required => 1,
element_attr => {
rel => ['tooltip'],
title => ['MOS average roundtrip.']
},
);
1;
# vim: set tabstop=4 expandtab:

@ -5,10 +5,7 @@ use Sipwise::Base;
use parent 'NGCP::Panel::Role::API';
use boolean qw(true);
use Data::HAL qw();
use Data::HAL::Link qw();
use HTTP::Status qw(:constants);
use POSIX;
use DateTime::Format::Strptime;
@ -20,7 +17,14 @@ use NGCP::Panel::Utils::CallList qw();
sub _item_rs {
my ($self, $c) = @_;
my $item_rs = $c->model('DB')->resultset('cdr');
my $item_rs = $c->model('DB')->resultset('cdr')->search_rs(
undef,
{
join => 'cdr_mos_data',
'+select' => [qw/cdr_mos_data.mos_average cdr_mos_data.mos_average_packetloss cdr_mos_data.mos_average_jitter cdr_mos_data.mos_average_roundtrip/],
'+as' => [qw/mos_average mos_average_packetloss mos_average_jitter mos_average_roundtrip/],
}
);
if($c->user->roles eq "admin") {
} elsif($c->user->roles eq "reseller") {
@ -66,41 +70,6 @@ sub get_form {
return NGCP::Panel::Form::get("NGCP::Panel::Form::CallList::Subscriber", $c);
}
sub hal_from_item {
my ($self, $c, $item, $owner, $form, $href_data) = @_;
my $resource = $self->resource_from_item($c, $item, $owner, $form);
my $hal = Data::HAL->new(
links => [
Data::HAL::Link->new(
relation => 'curies',
href => 'http://purl.org/sipwise/ngcp-api/#rel-{rel}',
name => 'ngcp',
templated => true,
),
Data::HAL::Link->new(relation => 'collection', href => sprintf("/api/%s/", $self->resource_name)),
Data::HAL::Link->new(relation => 'profile', href => 'http://purl.org/sipwise/ngcp-api/'),
Data::HAL::Link->new(relation => 'self', href => sprintf("%s%d?%s", $self->dispatch_path, $item->id, $href_data)),
# todo: customer can be in source_account_id or destination_account_id
# Data::HAL::Link->new(relation => 'ngcp:customers', href => sprintf("/api/customers/%d", $item->source_customer_id)),
],
relation => 'ngcp:'.$self->resource_name,
);
$form //= $self->get_form($c);
$self->validate_form(
c => $c,
resource => $resource,
form => $form,
run => 0,
);
$resource->{id} = int($item->id);
$hal->resource($resource);
return $hal;
}
sub resource_from_item {
my ($self, $c, $item, $owner, $form) = @_;
@ -120,13 +89,5 @@ sub resource_from_item {
return $resource;
}
sub item_by_id {
my ($self, $c, $id) = @_;
my $item_rs = $self->item_rs($c);
return $item_rs->find($id);
}
1;
# vim: set tabstop=4 expandtab:

@ -48,10 +48,11 @@ sub process_cdr_item {
$params //= $c->req->params;
$resource->{call_id} = $item->call_id;
$resource->{id} = $item->id;
$resource->{call_type} = $item->call_type;
foreach my $field (qw/id call_id call_type mos_average mos_average_packetloss mos_average_jitter mos_average_roundtrip/) {
if ($item->has_column_loaded($field)) {
$resource->{$field} = $item->get_column($field);
}
}
my $intra = 0;
if($item->source_user_id && $item->source_account_id == $item->destination_account_id) {
$resource->{intra_customer} = JSON::true;

Loading…
Cancel
Save