#@svc_x = sort { $a->domain cmp $b->domain || $a->username cmp $b->username }
# @svc_x;
+ my $conf = new FS::Conf;
+
{
'svcnum' => $session->{'svcnum'},
'custnum' => $custnum,
+ 'date_format' => $conf->config('date_format') || '%m/%d/%Y',
'svcs' => [
map {
my $svc_x = $_->svc_x;
# more...
);
- } elsif ( $svcdb eq 'svc_phone' ) {
+ } elsif ( $svcdb eq 'svc_phone' || $svcdb eq 'svc_port' ) {
%hash = (
%hash,
);
}
+sub port_graph {
+ my $p = shift;
+ _usage_details( \&_port_graph, $p,
+ 'svcdb' => 'svc_port',
+ );
+}
+
+sub _port_graph {
+ my($svc_port, $begin, $end) = @_;
+ my @usage = ();
+ push @usage, 999;
+ (@usage);
+}
+
sub _list_svc_usage {
my($svc_acct, $begin, $end) = @_;
my @usage = ();
use FS::cust_svc;
use GD::Graph;
use GD::Graph::mixed;
+use GD;
use Date::Format qw(time2str);
use Data::Dumper;
$graph->set(
types => ['area','lines'],
dclrs => ['green','blue'],
- x_label => "(In Out) Current: $in_curr $out_curr Average: $in_avg $out_avg Maximum: $in_max $out_max Minimum: $in_min $out_min",
+ x_label => ' ',
x_tick_number => 'auto',
x_number_format => sub {
my $value = shift;
},
y_label => 'bps',
legend_placement => 'BR',
+ lg_cols => 1,
title => $self->serviceid,
) or return "can't create graph: ".$graph->error;
or return "can't set text colour: ".$graph->error;
$graph->set_legend(('In','Out'))
or return "can't set legend: ".$graph->error;
+ $graph->set_title_font(['verdana', 'arial', gdGiantFont], 16)
+ or return "can't set title font: ".$graph->error;
+ $graph->set_legend_font(['verdana', 'arial', gdMediumBoldFont], 12)
+ or return "can't set legend font: ".$graph->error;
+ $graph->set_x_axis_font(['verdana', 'arial', gdMediumBoldFont], 12)
+ or return "can't set font: ".$graph->error;
+ $graph->set_y_axis_font(['verdana', 'arial', gdMediumBoldFont], 12)
+ or return "can't set font: ".$graph->error;
+ $graph->set_y_label_font(['verdana', 'arial', gdMediumBoldFont], 12)
+ or return "can't set font: ".$graph->error;
my $gd = $graph->plot(\@data);
return "graph error: ".$graph->error unless($gd);
+
+ my $black = $gd->colorAllocate(0,0,0);
+ $gd->string(gdMediumBoldFont,50,285,
+ "Current: $in_curr Average: $in_avg Maximum: $in_max Minimum: $in_min",$black);
+ $gd->string(gdMediumBoldFont,50,305,
+ "Current: $out_curr Average: $out_avg Maximum: $out_max Minimum: $out_min",$black);
+
return $gd->png;
}
'list_pkgs' => 'MyAccount/list_pkgs', #add to ss (added?)
'list_svcs' => 'MyAccount/list_svcs', #add to ss (added?)
'list_svc_usage' => 'MyAccount/list_svc_usage',
+ 'port_graph' => 'MyAccount/port_graph',
'list_cdr_usage' => 'MyAccount/list_cdr_usage',
'list_support_usage' => 'MyAccount/list_support_usage',
'order_pkg' => 'MyAccount/order_pkg', #add to ss cgi!
use Text::Template;
use HTML::Entities;
use Date::Format;
+use Date::Parse 'str2time';
use Number::Format 1.50;
use FS::SelfService qw(
access_info login_info login customer_info edit_info invoice
unprovision_svc change_pkg suspend_pkg domainselector
list_svcs list_svc_usage list_cdr_usage list_support_usage
myaccount_passwd list_invoices create_ticket get_ticket did_report
- mason_comp
+ mason_comp port_graph
);
$template_dir = '.';
sub view_usage {
list_svcs(
'session_id' => $session_id,
- 'svcdb' => [ 'svc_acct', 'svc_phone' ],
+ 'svcdb' => [ 'svc_acct', 'svc_phone', 'svc_port', ],
'ncancelled' => 1,
);
}
sub view_usage_details {
- list_svc_usage(
- 'session_id' => $session_id,
- 'svcnum' => $cgi->param('svcnum'),
- 'beginning' => $cgi->param('beginning') || '',
- 'ending' => $cgi->param('ending') || '',
- );
+ my $svcnum = $cgi->param('svcnum');
+
+ # for svc_port graphs
+ if($cgi->param($svcnum.'_start') && $cgi->param($svcnum.'_end')) {
+ return port_graph(
+ 'session_id' => $session_id,
+ 'svcnum' => $svcnum,
+ 'start' => str2time($cgi->param($svcnum.'_start')),
+ 'end' => str2time($cgi->param($svcnum.'_end')),
+ );
+ }
+ else {
+ return list_svc_usage(
+ 'session_id' => $session_id,
+ 'svcnum' => $svcnum,
+ 'beginning' => $cgi->param('beginning') || '',
+ 'ending' => $cgi->param('ending') || '',
+ );
+ }
}
sub view_cdr_details {
<%= $url = "$selfurl?session=$session_id;action=";
@svc_acct = grep { $_->{svcdb} eq 'svc_acct' } @svcs;
@svc_phone = grep { $_->{svcdb} eq 'svc_phone' } @svcs;
+ @svc_port = grep { $_->{svcdb} eq 'svc_port' } @svcs;
'';
%>
<%= include('header', 'Account usage') %>
<%= scalar(@svc_phone) ? '</TABLE><BR><BR>' : '' %>
+<%= if ( @svc_port ) {
+ $OUT.= '<FONT SIZE="4">Bandwidth Graphs</FONT><BR><BR>
+ <script type="text/javascript">
+ function preset_range(start,end,prefix){
+ document.getElementById(prefix+\'_start\').value = start;
+ document.getElementById(prefix+\'_end\').value = end;
+ }
+ </script>
+ <TABLE BGCOLOR="#cccccc">
+ <TR>
+ <TH ALIGN="left">Service</TH>
+ <TH ALIGN="right">
+ </TH>
+ </TR>';
+ }
+ $OUT .= '';
+%>
+
+<%=
+
+sub preset_range {
+ my($start,$end,$label,$date_format,$prefix) = (shift,shift,shift,shift,shift);
+ $start = Date::Format::time2str($date_format,$start);
+ $end = Date::Format::time2str($date_format,$end);
+ return '<A HREF="javascript:void(0);" onclick="preset_range(\''
+ .$start.'\',\''.$end.'\',\''.$prefix.'\')">'.$label.'</A>';
+}
+
+foreach my $svc_port ( @svc_port ) {
+ $svcnum = $svc_port->{'svcnum'};
+ $default_end = time;
+ $default_start = $default_end-86400;
+
+ $OUT .= '<TR><TD>'. $svc_port->{'label'}. ': '. $svc_port->{'value'}.'</TD>';
+ $OUT .= qq! <TD><FORM ACTION="$url" METHOD="GET">
+ <INPUT TYPE="hidden" name="svcnum" value="$svcnum">
+ <INPUT TYPE="hidden" name="action" value="view_usage_details">
+ <INPUT TYPE="hidden" name="session" value="$session_id"> !;
+ $OUT .= preset_range($default_start,$default_end,'Last Day',$date_format,$svcnum)
+ .' | '.preset_range($default_end-86400*7,$default_end,'Last Week',$date_format,$svcnum)
+ .' | '.preset_range($default_end-86400*30,$default_end,'Last Month',$date_format,$svcnum)
+ .' | '.preset_range($default_end-86400*365,$default_end,'Last Year',$date_format,$svcnum);
+
+ $OUT .= qq! <BR>
+ Start Date <INPUT TYPE="TEXT" id="${svcnum}_start" name="${svcnum}_start" SIZE="10" MAXLENGTH="10">
+ End Date <INPUT TYPE="TEXT" id="${svcnum}_end" name="${svcnum}_end" SIZE="10" MAXLENGTH="10">
+ <BR>
+ <INPUT TYPE="submit" value="Display"> !;
+
+ $OUT .= '</FORM></TD></TR>';
+}
+%>
+
+<%= scalar(@svc_port) ? '</TABLE><BR><BR>' : '' %>
+
+
</TD></TR></TABLE>
<%= include('footer') %>
die 'invalid host' unless $host =~ /^[0-9.a-zA-Z\-]+$/;
my $iface = $cgi->param('iface');
-die 'invalid iface' unless $iface =~ /^[0-9A-Za-z_\-.]+$/;
+die 'invalid iface' unless $iface =~ /^[0-9A-Za-z_\-.\\\/ ]+$/;
</%init>
sub preset_range {
my($start,$end,$label,$date_format) = (shift,shift,shift,shift);
- warn "$start $end $date_format";
$start = time2str($date_format,$start);
$end = time2str($date_format,$end);
return '<A HREF="javascript:void(0);" onclick="preset_range(\''
[% hidden ? '</EM>':'';
thisIsAlias ? '</EM>':''; %]
[% IF matches(thepath,'Interface_Counters/$') %]
+ <FONT SIZE="-1">
[% popup_link('nms-add_iface.html',nodeName(parent(token)),uri_escape(nodeName(child))) %]
+ </FONT>
[% END %]
</SPAN>
[% IF comment %]