PluginOutdatedCatalog: qos_.2

File qos_.2, 2.8 KB (added by fra519@…, at 2006-07-18T21:29:24+02:00)

BUG corrected in parser, QoS script use tc program, monitor of each queue attached on specified network device, see script for env configuration.

Line 
1#!/usr/bin/perl -w
2# -*- perl -*-
3# Wildcard plugin to monitor QoS queues.
4#
5# Requirements:
6#       - tc program installed and in path
7#
8# Parameters supported:
9#
10#       config
11#       autoconf
12#       suggest
13#
14# Configurable variables
15#
16#       tc                - Override default program
17#       ignore_queue<n>   - Queue with handle <n> (ex ignore_queue0 for root queue) not be plotted
18#       label_name<n>     - Queue with handle <n> as define label
19#
20# $Log$
21# Revision 1.1  2006/03/05 17:11:36  fra519
22#
23#
24# Magic markers:
25#%# family=manual
26#%# capabilities=autoconf suggest
27
28use strict;
29
30my $TC = $ENV{'tc'} || 'tc';
31
32if ($ARGV[0] and $ARGV[0] eq 'suggest') {
33  my $text = `egrep '^ *(eth|wlan|ath|ra)[0-9]+:' /proc/net/dev | cut -f1 -d:`;
34  print $text;
35  exit;
36}
37
38$0 =~ /qos_(.+)*$/;
39my $IFACE = $1;
40exit 2 unless defined $IFACE;
41
42if ( exists $ARGV[0] and $ARGV[0] eq 'autoconf' ) {
43  # Now see if "tc" can run
44  my $text = `$TC qdisc show dev $IFACE`;
45  if ($?) {
46    if ($? == -1) {
47      print "no (program $TC not found)\n";
48    } else {
49      print "no (program $TC died)\n";
50    }
51    exit 1;
52  }
53  print "yes\n";
54  exit 0;
55}
56
57my %queues;
58my $qdisc;
59my $queue;
60my $handle;
61my $one;
62my $sent;
63
64open(TEXT, "$TC -s qdisc show dev $IFACE|");
65while (! eof(TEXT)) {
66  $qdisc = "";
67  while ($qdisc ne "qdisc" and  ! eof(TEXT)) {
68    ($qdisc, $queue, $handle) = split(" ", <TEXT>);
69  }
70  if (! eof(TEXT)) {
71    ($one, $sent) = split(" ", <TEXT>);
72    $handle =~ s/://;
73    $queues{$handle} = {
74      queue => $queue,
75      handle => $handle,
76      sent => $sent
77    };
78  }
79}
80
81if ( exists $ARGV[0] and $ARGV[0] eq 'config' ) {
82  print "graph_title QoS queue on $IFACE\n";
83  print "graph_args --base 1000\n";
84  print "graph_vlabel bits per \${graph_period}\n";
85  print "graph_category network\n";
86  print "graph_info This graph shows the QoS queue of the $IFACE network interface.\n";
87  print "graph_order ";
88  foreach my $key (sort by_handle keys %queues) {
89    print $queues{$key}->{queue},$queues{$key}->{handle}, " ";
90  }
91  print "\n";
92  foreach my $key (sort by_handle keys %queues) {
93    print $queues{$key}->{queue},$queues{$key}->{handle}, ".label ";
94    if (exists $ENV{"label_name$queues{$key}->{handle}"}) {
95      print $ENV{"label_name$queues{$key}->{handle}"};
96    } else {
97      print $queues{$key}->{queue},$queues{$key}->{handle};
98    }
99    print "\n";
100    print $queues{$key}->{queue},$queues{$key}->{handle}, ".type COUNTER\n";
101    print $queues{$key}->{queue},$queues{$key}->{handle}, ".graph no\n" if exists $ENV{"ignore_queue$queues{$key}->{handle}"};
102    print $queues{$key}->{queue},$queues{$key}->{handle}, ".cdef ", $queues{$key}->{queue},$queues{$key}->{handle}, ",8,*\n";
103  }
104  exit 0;
105}
106
107sub by_handle {
108  return $a cmp $b;
109}
110
111foreach my $key (sort by_handle keys %queues) {
112  print $queues{$key}->{queue},$queues{$key}->{handle}, ".value ",$queues{$key}->{sent}, "\n";
113}
114#
115# vim:syntax=perl