I2MAD

Just Another GetSimple Website

Pagina di prova

OK, oggi pomeriggio non avevo l'ispirazione per lavorare "seriamente" (è pur sempre sabato) e quindi mi son preso un'oretta e per divertimento e per sporcarmi un po' le mani con qualcosa di nuovo, ho convertito dal Perl in newLISP un piccolissimo script che legge le varie code del Postifix riportando il numero di messaggi trovati.

 


Lo script in Perl è questo:


#!/usr/bin/env perl

    # postfix queue/s size
    # author:
    # source: http://tech.groups.yahoo.com/group/postfix-users/message/255133

use strict;
use warnings;
use Symbol;
sub count {
        my ($dir) = @_;
        my $dh = gensym();
        my $c = 0;
        opendir($dh, $dir) or die "$0: opendir: $dir: $!\n";
        while (my $f = readdir($dh)) {
                if ($f =~ m{^[A-F0-9]{5,}$}) {
                        ++$c;
                } elsif ($f =~ m{^[A-F0-9]$}) {
                        $c += count("$dir/$f");
                }
        }
        closedir($dh) or die "closedir: $dir: $!\n";
        return $c;
}
my $qdir = `postconf -h queue_directory`;
chomp($qdir);
chdir($qdir) or die "$0: chdir: $qdir: $!\n";
printf "Incoming: %d\n", count("incoming");
printf "Active: %d\n", count("active");
printf "Deferred: %d\n", count("deferred");
printf "Bounced: %d\n", count("bounce");
printf "Hold: %d\n", count("hold");
printf "Corrupt: %d\n", count("corrupt");

Mentre la versione in newLISP è questa:

#!/usr/bin/newlisp

;- - - Open the subfolder and loop over the entries.
;- - - Returning the number of valid entries found.
(define (do-count subdir)
        (setq c 0)
        (setq dir-path (real-path (string "./" subdir)))
        (setq dir-list (directory dir-path))
        (if (nil? dir-list)
                (begin
                        (println (main-args 1) ": \"" dir-path "\" --> " (nth 1 (sys-error)))
                        (exit)))

        (dolist (i dir-list)
                (if (regex {^[A-F0-9]{5,}$} i)
                        (++ c)
                        (if (regex {^[A-F0-9]$} i)
                                (+ c (do-count (string subdir "/" i))))))
        c)

;= = = MAIN = = =

;- - - Let's find the  spool dir
(setq queue-dir (exec "postconf -h queue_directory"))

;- - - Let's change the  working directory
(if (not (change-dir (first queue-dir)))
        (begin
                (println (main-args 1) ": \"" (first queue-dir) "\" --> " (nth 1 (sys-error)))
                (exit)))

(println "\n\nPostfix queue report")
(println "====================")
(println "Incoming: " (do-count "incoming"))
(println "Active: " (do-count "active"))
(println "Deferred: " (do-count "deferred"))
(println "Defer: " (do-count "defer"))
(println "Bounced: " (do-count "bounce"))
(println "Hold: " (do-count "hold"))
(println "Corrupt: " (do-count "corrupt"))
(println "Maildrop: " (do-count "maildrop"))
println "--------------------")
(exit)