Протоколирование заданий печати (ВыньХР/2003)
Добавлено: 2007-05-03 14:20:24
Приперло тут руководству знать кто куда и сколько печатал.... Вариант собрать все принтеры в одну комнату и поставить жандарма почему-то не вызвал энтузиазма Пришлось искать другие решения... Поглядев сторонние софтины пришел к выводу что они не обладают нужной гибкостью Прикинув создал табличку:И склепал скриптик для выборки данных и засылки всем желающим на почту: (это за предыдущий день... думаю переписать чтоб за месяц/год/век генерило труда не составит )Сама прога лежит здесь
О конфиге:
После решетки `#` можно писать что угодно, а вот в присвоении пробелы не переваривает. Потом добавлю вызовы trim(), хотя задача стояла не в написании парсера конфига
Установка осуществляется:
1. Распаковать куда-нибудь
2. Отредактировать конфиг (если поменяли название проги меняйте и имя конфига)
3. Запускаете printlogger.exe -install чтоб прописалось в список сервисов и стартовало при старте машины автоматом. Соответственно printlogger.exe -deinstall убирает из сервисов.
4. Зайти в остнастку службы и запустить сервис PrintJobLogger
Гм. Вроде все
Код: Выделить всё
CREATE TABLE `printers` (
`rowid` int(11) NOT NULL auto_increment,
`pname` char(20) default NULL,
`puser` char(15) default NULL,
`mname` char(15) default NULL,
`document` char(80) default NULL,
`pages` int(2) default '0',
`jobid` int(4) default '0',
`ptime` datetime default NULL,
`stat` int(2) default NULL,
PRIMARY KEY (`rowid`),
UNIQUE KEY `ux_jobid` (`jobid`,`ptime`,`pname`),
) ENGINE=MyISAM;
Код: Выделить всё
/root/>cat print-daily.pl
#!/usr/bin/perl -w
# MySQL - хост где БД
$db_host = 'localhost';
# MySQL юзер
$db_user = 'printlogger';
# MySQL пароль
$db_password = 'printlogger';
# MySQL база данных
$db_database = 'printer';
# подрубаем модуль для работы с MySQL
use DBI;
$admemail="admin\@mydomain.ru";
$RobotName="Stat robot";
$RobotAddr="no-reply\@mydomain.ru";
my @monthstr = ('января','февраля','марта','апреля',
'мая','июня','июля','августа',
'сентября','октября','ноября','декабря');
sub SendEMail {
open (SENDMAIL, "|/usr/sbin/sendmail -t") or die "sendmail not ready";
print SENDMAIL "From: $RobotName <$RobotAddr>\n";
print SENDMAIL "To: $_[0]\n";
print SENDMAIL "Reply-To: Admin <$admemail>\n";
print SENDMAIL "Content-Type: text/plain; charset=win-1251\n";
print SENDMAIL "Subject: $_[1]\n\n";
print SENDMAIL "$_[2]";
close (SENDMAIL) or warn "sendmail didn`t close nicely";
};
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst)=localtime(time);
$year=$year + 1900;
++$month;
if ($month < 10) {$month = '0' . $month};
if ($mday < 10) {$mday = '0' . $mday};
my $dsn = "DBI:mysql:database=$db_database;host=$db_host";
my $dbh = DBI->connect($dsn, $db_user, $db_password);
$sql = "select pname, sum(pages) as pages from printers where ptime like '$year-$month-$mday%' group by pname order by pages;";
$body="Отпечатано\tПринтер\n";
my $pages = 0;
my $sth = $dbh->prepare($sql);
$sth->execute();
while (@tmp = $sth->fetchrow_array()) {
($pname, $pages) = @tmp;
$body=$body . "${pages}\t\t${pname}\n";
}
$sth->finish();
$subj = 'Отчет по отпечатанному за '. $mday .' ' . $monthstr[$month - 1] . ' '. $year . ' года';
$msg = $subj . "\n\n" . $body;
SendEMail('admin@mydomain.ru', $subj, $msg);
SendEMail('bigboss@mydomain.ru', $subj, $msg);
1;
О конфиге:
После решетки `#` можно писать что угодно, а вот в присвоении пробелы не переваривает. Потом добавлю вызовы trim(), хотя задача стояла не в написании парсера конфига
Установка осуществляется:
1. Распаковать куда-нибудь
2. Отредактировать конфиг (если поменяли название проги меняйте и имя конфига)
3. Запускаете printlogger.exe -install чтоб прописалось в список сервисов и стартовало при старте машины автоматом. Соответственно printlogger.exe -deinstall убирает из сервисов.
4. Зайти в остнастку службы и запустить сервис PrintJobLogger
Гм. Вроде все