diff options
-rw-r--r-- | FS/FS/ClientAPI/MyAccount.pm | 19 | ||||
-rw-r--r-- | FS/FS/svc_port.pm | 21 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/SelfService.pm | 1 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 30 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/cgi/view_usage.html | 57 | ||||
-rw-r--r-- | httemplate/misc/nms-add_iface.html | 2 | ||||
-rw-r--r-- | httemplate/view/svc_port.cgi | 1 | ||||
-rw-r--r-- | torrus/templates/default-dir.html | 2 |
8 files changed, 121 insertions, 12 deletions
diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index c82d37043..be1146e47 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -1084,9 +1084,12 @@ sub list_svcs { #@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; @@ -1122,7 +1125,7 @@ sub list_svcs { # more... ); - } elsif ( $svcdb eq 'svc_phone' ) { + } elsif ( $svcdb eq 'svc_phone' || $svcdb eq 'svc_port' ) { %hash = ( %hash, ); @@ -1136,6 +1139,20 @@ sub list_svcs { } +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 = (); diff --git a/FS/FS/svc_port.pm b/FS/FS/svc_port.pm index db1f539b8..afd412e59 100644 --- a/FS/FS/svc_port.pm +++ b/FS/FS/svc_port.pm @@ -9,6 +9,7 @@ use FS::Record qw( qsearch qsearchs use FS::cust_svc; use GD::Graph; use GD::Graph::mixed; +use GD; use Date::Format qw(time2str); use Data::Dumper; @@ -344,7 +345,7 @@ sub graph_png { $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; @@ -365,6 +366,7 @@ sub graph_png { }, y_label => 'bps', legend_placement => 'BR', + lg_cols => 1, title => $self->serviceid, ) or return "can't create graph: ".$graph->error; @@ -372,9 +374,26 @@ sub graph_png { 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; } diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index fe2feb3c1..ec0329bd2 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -45,6 +45,7 @@ $socket .= '.'.$tag if defined $tag && length($tag); '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! diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index 5b2d2980c..1db0c585b 100644 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -8,6 +8,7 @@ use CGI::Carp qw(fatalsToBrowser); 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 @@ -17,7 +18,7 @@ use FS::SelfService qw( 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 = '.'; @@ -796,18 +797,31 @@ sub delete_svc { 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 { diff --git a/fs_selfservice/FS-SelfService/cgi/view_usage.html b/fs_selfservice/FS-SelfService/cgi/view_usage.html index 69437632b..beb1c2e74 100644 --- a/fs_selfservice/FS-SelfService/cgi/view_usage.html +++ b/fs_selfservice/FS-SelfService/cgi/view_usage.html @@ -1,6 +1,7 @@ <%= $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') %> @@ -81,5 +82,61 @@ <%= 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') %> diff --git a/httemplate/misc/nms-add_iface.html b/httemplate/misc/nms-add_iface.html index ef4b4eb46..1de0249ef 100644 --- a/httemplate/misc/nms-add_iface.html +++ b/httemplate/misc/nms-add_iface.html @@ -19,6 +19,6 @@ my $host = $cgi->param('host'); 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> diff --git a/httemplate/view/svc_port.cgi b/httemplate/view/svc_port.cgi index 84d0e49e3..0df826366 100644 --- a/httemplate/view/svc_port.cgi +++ b/httemplate/view/svc_port.cgi @@ -39,7 +39,6 @@ if ( $cgi->param('start') && $cgi->param('end') ) { 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(\'' diff --git a/torrus/templates/default-dir.html b/torrus/templates/default-dir.html index fe13a9bbe..91e6e4425 100644 --- a/torrus/templates/default-dir.html +++ b/torrus/templates/default-dir.html @@ -45,7 +45,9 @@ [% 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 %] |