]> git.ipfire.org Git - ipfire-2.x.git/blame - src/scripts/qosd
Add cdrtools to updater
[ipfire-2.x.git] / src / scripts / qosd
CommitLineData
bcad0fd0 1#!/usr/bin/perl -w
a7fb5630
MT
2use strict;
3
4##########################################
5##
6## DESCRIPTION
7##
8## The tc-graph daemon script: "tc-collector"
9## Which is part of the ADSL-optimizer.
10##
11## The script will become a daemon and periodically collect data
12## from the Linux traffic control system. The collected data is
13## stored in some RRD-data files, which is created automatically by
14## the script if they don't exist.
15##
16## GRAPHs
17##
18## How the RRD-data is displayed as graphs is not part of the
19## tc-collector tool. But we recommend using the RRD-frontend 'ddraw'.
20## We have included some 'ddraw' examples (which is hardcoded to use
21## files from '/var/spool/rrdqueues').
22##
23## drraw: http://web.taranis.org/drraw/
24##
25##
26## REQUIRES
27##
28## RRDtools Perl interface RRDs
29## The "tc" command.
30##
31##
32## AUTHOR
33## Jesper Dangaard Brouer <hawk@diku.dk>, d.16/4-2004
34##
35## CHANGELOG
36## 2004-04-16: Initial version.
37## 2004-05-27: Daemon version.
38##
39## $Id: tc-collector.pl,v 1.12 2005/03/19 19:31:08 hawk Exp $
40##########################################
41
42# TODO:
43# * Calc time used to parse, use to make time steps more precise
44# * Device list support
45# * Detecting the correct devices
46
47# Configuration options:
48#
7ccede9b 49my $device = "$ARGV[0]";
bcad0fd0
CS
50
51my %mainsettings = ();
52&General::readhash("${General::swroot}/main/settings", \%mainsettings);
53
54our $event_datadir = $mainsettings{'RRDLOG'};
a7fb5630
MT
55our $STEP = 10;
56our $tc_command = "/sbin/tc";
57
58# A trick is to set the environment PERL5LIB to include $GRAPHDIR
59# This is done by the init-script
60# ($GRAPHDIR is obtained from /usr/local/etc/ADSL-optimizer.conf)
61my $include_dir = '/var/ipfire/qos/bin';
62
63
bcad0fd0
CS
64# Create the $mainsettings{'RRDLOG'} if it doesn't exists
65if ( ! -d $mainsettings{'RRDLOG'} ) {
66 print "RRD-datadir not found, creating it: $mainsettings{'RRDLOG'} \n";
67 my $status = system("mkdir $mainsettings{'RRDLOG'}");
68 die "\nERROR cannot create \"$mainsettings{'RRDLOG'}\"\n" unless $status == 0;
a7fb5630
MT
69}
70
71# use POSIX;
72#
bcad0fd0 73#POSIX::setsid()
a7fb5630
MT
74# or die "Can't become a daemon: $!";
75
76# The init scripts will do the right "daemon" thing...
bcad0fd0 77# Become a daemon
a7fb5630
MT
78print "Becoming a daemon...\n";
79my $pid = fork;
80exit if $pid;
81die "Couldn't fork: $!" unless defined($pid);
82
83my $time_to_die = 0;
84sub signal_handler {
85 $time_to_die = 1;
86}
87# Trap signals
88$SIG{INT} = $SIG{TERM} = $SIG{HUP} = \&signal_handler;
89$SIG{PIPE} = 'IGNORE';
90
91our %classes_data;
92our %classes_info;
93require "$include_dir/parse-func.pl";
bcad0fd0 94require "$include_dir/event-func.pl";
a7fb5630
MT
95require "$include_dir/RRD-func.pl";
96
97until ($time_to_die) {
98
99 #print "Parsing tc statistics on $device\n";
100 my $res = parse_class($device);
101 if ( ! $res ) {
102 print " Error when parsing classes on $device\n";
103 }
104
105 #print "Updating RRD data-files\n";
106 $res = update_rrds();
107 #if ( $res ) {
108 # print " Error updating RRDs: \"$res\"\n";
109 #}
bcad0fd0
CS
110
111 process_events();
112
a7fb5630
MT
113# my $timestamp = time;
114# print "$timestamp\n";
bcad0fd0 115
a7fb5630
MT
116 sleep($STEP);
117}
118
119print "tc-collector daemon exiting ... bye bye!\n";