diff options
author | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2008-10-12 23:09:17 +0000 |
---|---|---|
committer | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2008-10-12 23:09:17 +0000 |
commit | d9adb83fcfde40ffbfac166e1a4f615a7811570e (patch) | |
tree | 5efa884eb49699ca005e17ba4f901c86761bf1be /xpp/dahdi.cgi | |
parent | 47b7fbb437a8f2988b60b906bc2a782888e060b0 (diff) |
A CGI script to give some information about Zaptel through the
Dahdi perl interface.
A simple demo. Not installed automatically.
git-svn-id: http://svn.asterisk.org/svn/dahdi/tools/trunk@5088 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'xpp/dahdi.cgi')
-rwxr-xr-x | xpp/dahdi.cgi | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/xpp/dahdi.cgi b/xpp/dahdi.cgi new file mode 100755 index 0000000..5b0e591 --- /dev/null +++ b/xpp/dahdi.cgi @@ -0,0 +1,265 @@ +#! /usr/bin/perl -wT + +# Written by Tzafrir Cohen <tzafrir.cohen@xorcom.com> +# Copyright (C) 2008, Xorcom +# This program is free software; you can redistribute and/or +# modify it under the same terms as Perl itself. + +use strict; +use File::Basename; +BEGIN { my $dir = dirname($0); unshift(@INC, "$dir", "$dir/perl_modules"); } + +use CGI::Pretty qw/:standard start_ul start_li start_div start_pre/; +use Dahdi; +use Dahdi::Xpp; +use Dahdi::Hardware; + +$ENV{'PATH'} = '/bin:/usr/bin'; + +my $DEF_TOK = '<Default>'; + +my $style=<<END; +<!-- +body { + margin-left: 0em; + margin-right: 5em; + //color: navy; + background-color: #white; +} + +dfn { + font-style: italic; + text-decoration: underline; +} + +#content { + margin-left: 10em; +} + +h1, h2, h3 { + color: #d03; + margin-top: 2ex; +} + +h1 { + text-align: center; + color: #d03; + background-color: #ccc; + margin-left:5em; +} +/* +li:hover { + background-color: #44c; +} + +li li:hover { + background-color: #448; +} +*/ +/*li.status-ok */ +.status-noconf {background-color: red; } +.status-notused {background-color: pink; } + +#toc { + position: fixed; + width: 9em; + top: 3ex; + bottom: 0pt; + height: 100%; + margins-left: 1em; + color: #448; + +} + +#toc p { + display: block; + //text-align: center; + height: 3ex; +} + +#toc a { + text-decoration: none; + /* + background-color: #F0FFF0; + */ + font-weight: bold; + display: block; + padding: 0.2em; + width: 80%; + margin-bottom: 0.2ex; + border-top: 1px solid #8bd; + color: #8bd; + text-align: right; +} + +--> +END + +my @Toc = (); + +sub header_line($$) { + my ($text, $anchor) = @_; + print a({-name=>$anchor},h2($text)); + push(@Toc, [$text, $anchor] ); +} + +print header, + start_html( + -title=>"DAHDI Information", + -style=>{-code=>$style}), + h1("DAHDI Information"); + +print start_div({-id=>'content'}); + +sub dahdi_spans() { + my %ChansStat = (num=>0, configured=>0, inuse=>0); + + header_line("DAHDI Spans", 'spans'); + + print p('Here we list the ', + dfn({-title=> 'A span is a logical unit of dahdi + channels. e.g.: all the channels that come from + a specific port, or all the analog channels from + a certain PCI card'}, + 'spans'), + ' that DAHDI devices registered + with DAHDI. For each span we list all of its channels.' + ), + p('A channel that appears in ', + span({-class=>'status-noconf'},'red text'),' ', + 'is one that has not been configured at all. Either not + listed in system.conf, or dahdi_cfg was not run.' + ), + p('A channel that appears in ', + span({-class=>'status-notused'},'pink text'),' ', + 'is one that has been configured but is not used by any + application. This usually means that either Asterisk is + not running or Asterisk is not configured to use this + channel' + ), + p('If a port is disconnected it will have a "RED" alarm. + For a FXO port this will only be on the specific port. + For a BRI, E1 or T1 port it will be an alarm on the apn + and all of the channels.'), + ; + + + + foreach my $span (Dahdi::spans()) { + my $spanno = $span->num; + my $index = 0; + + print h3(a({-name=>"zap_span_$spanno"}, "Span $spanno: ", + $span->name, " ", $span->description)), + start_ul; + foreach my $chan ($span->chans()) { + my $batt = ''; + $batt = "(battery)" if $chan->battery; + my $type = $chan->type; + my $sig = $chan->signalling; + my $info = $chan->info; + my $chan_stat = 'ok'; + $ChansStat{num}++; + if (!$sig) { + $chan_stat = 'noconf'; + } else { + $ChansStat{configured}++; + if ($info =~ /\(In use\)/) { + $ChansStat{inuse}++; + } else { + $chan_stat = 'notused'; + } + } + # TODO: color differently if no signalling and + # if not in-use and in alarm. + print li({-class=>"status-$chan_stat"}, + $chan->num, " $type, $sig $info $batt"); + } + print end_ul; + } +} + +sub dahdi_hardware() { + header_line("DAHDI Hardware", 'zap_hard'); + + print p('Here we list all the DAHDI hardware devices on your + system. If a device is not currently handled by a + driver, it will appear as ', + span({-class=>'status-noconf'},'red text'),'.'); + + my $hardware = Dahdi::Hardware->scan; + + print start_ul; + foreach my $device ($hardware->device_list) { + my $driver = $device->driver || ""; + my $status = 'ok'; + + if (! $device->loaded) { + $status = 'noconf'; + } + + print li({-class=>"status-$status"}, + $device->hardware_name, ": ", $driver, + " [".$device->vendor,"/". $device->product. "] ", + $device->description); + } + print end_ul; +} + +sub astribanks() { + header_line("Astribanks", 'astribanks'); + + print p('Here we list all the Astribank devices (That are + handled by the drivers). For each Astribank we list + its XPDs. A ', + dfn({-title=> + 'a logical unit of the Astribank. It will '. + 'be registered in DAHDI as a single span. This '. + 'can be either an analog (FXS or FXO) module or '. + 'a single port in case of a BRI and PRI modules.' + }, + 'XPD'),'. ', + ' that is registered will have a link to the + information about the span below. One that is not + registered will appear as ', + span({-class=>'status-noconf'},'red text'),'.'); + + print start_ul; + + foreach my $xbus (Dahdi::Xpp::xbuses()) { + print start_li, + $xbus->name." (".$xbus->label .", ".$xbus->connector .")", + start_ul; + foreach my $xpd ($xbus->xpds) { + my $chan_stat = 'ok'; + my $span_str = 'UNREGISTERED'; + if ($xpd->spanno) { + my $spanno = $xpd->spanno; + $span_str = + a({-href=>"#zap_span_$spanno"}, + "Span $spanno"); + } else { + $chan_stat = 'noconf'; + } + print li({-class=>"status-$chan_stat"}, + '[', $xpd->type, '] ', $span_str, $xpd->fqn + ); + } + print end_ul, end_li; + } + print end_ul; +} + + +dahdi_hardware(); + +astribanks(); + +dahdi_spans(); + +print end_div(); # content + +print div({-id=>'toc'}, + p( a{-href=>'/'},'[Homepage]' ), + ( map {p( a({-href=> '#'.$_->[1]},$_->[0] ) )} @Toc ), +); |