#!/usr/bin/perl -w

# OTRS-Projekt: muss fürs OTRS neu implementiert werden, vgl. #10039713

use utf8;
use strict;
use warnings;

BEGIN {
    unshift @INC, ( $ENV{'POPHOME'} || '@POPHOME@' ) . '/lib'
      unless $ENV{'KUNDE_NO_PERLPATH'};
}

use Dbase::Getopt;
use Dbase::Globals qw(find_descr);
use Dbase::Help qw(:readonly DoFn DoSelect DoTime);
use File::Spec();
use RRDs();

use constant STATUS => qw(open stalled resolved);

GetOptions( 'output-directory=s' =>
      \( my $OutputDirectory = '/www/data/rt-queue_stats' ), );

my %tickets = map +( find_descr( tickets => $_, 1 ) => $_ ), STATUS;

my %count;
DoSelect {
    my ( $queue, $status, $count ) = @_;
    $count{$queue}{ $tickets{$status} } = $count;
  }
  <<_;
	SELECT   queue.name, ticket.status, COUNT(*)
	FROM     queue, ticket
	WHERE    queue.id  = ticket.queue
	     AND ticket.id = ticket.ticket
	     AND ticket.status IN (${\ join ',', keys %tickets })
	GROUP BY ticket.queue, ticket.status
	ORDER BY ticket.queue, ticket.status
_

while ( my ( $queue, $count ) = each %count ) {
    my $rrd = File::Spec->catfile( $OutputDirectory, "$queue.rrd" );
    unless ( -f $rrd ) {
        RRDs::create( $rrd, map( "DS:$_:GAUGE:86400:0:U", STATUS ),
            'RRA:AVERAGE:0.5:1:288', 'RRA:AVERAGE:0.5:12:1008',
            'RRA:AVERAGE:0.5:288:3650' );
        if ( my $error = RRDs::error() ) {
            warn qq(Error creating "$rrd": $error\n);
            next;
        } else {
            print qq(Created "$rrd".\n);
	}
    }
    RRDs::update( $rrd, join ':', DoTime(), map $count->{$_} || 0, STATUS );
    if ( my $error = RRDs::error() ) {
        warn qq(Error updating "$rrd": $error\n);
    }
}

=head1 NAME

collect_rt-queue_stats - Anzahl Tickets pro Queue und Status in RRDs schreiben

=head1 SYNOPSE

	collect_rt-queue_stats --output-directory /www/data/rt-queue_stats

=head1 BESCHREIBUNG

Dieses Script ermittelt die Anzahl der open/stalled/resolved Tickets pro Queue
und trägt diese in eine RRD pro Queue ein, die für neu gefundene Queues ggf.
automagisch angelegt wird.

=head1 OPTIONEN

=over 4

=item -output-directory Verzeichnis

Verzeichnis, in dem die RRDs angelegt werden sollen, Default s. L</SYNOPSE>.

=item -help

=item -?

um (nur) diese Dokumentation anzeigen zu lassen

=back

Bestehende Dateien werden grundsätzlich überschrieben.
Falls auf die Standardausgabe geschrieben werden soll, bitte einfach eine leeren
Zeichenkette als Dateinamen angeben!

=head1 AUTOR

 Martin H. Sluka <fany@noris.net>
 fuer die noris network AG
 RT#231423

=cut

