aboutsummaryrefslogtreecommitdiffstats
path: root/timeseries
blob: 7a20c4c28c05056a16085c6a701fd61db5757792 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/bin/perl
#
# Extract information on the fetchmail project size from the NEWS file
#
# Note: this only works if you have a news file from 5.1.1 or later --
# I didn't patch the code sizes into NEWS until then.
#
my($release, $date, $jdate);

%month_offsets = (
	"Jan",   0,
	"Feb",   31,
	"Mar",   59,
	"Apr",   90,
	"May",   120,
	"Jun",   151,
	"Jul",   181,
	"Aug",   212,
	"Sep",   243,
	"Oct",   273,
	"Nov",   304,
	"Dec",   334,
);


sub day_offset
{
    my($datestring) = @_;
    my($wday, $month, $day, $time, $zone, $year) = split(' ', $datestring);
    my($jdate);

    # We don't deal with leap years here because the baseline day is after
    # the last leap year (1996) and there's a long time before the next
    # one (2004).
    $jdate = ($year - 1996) * 365;

    $jdate += $month_offsets{$month};

    $jdate += ($day - 1);

    # Baseline day for the size data was Fri Oct 25 23:02:26 EDT 1996 
    $jdate -= 297;

    return($jdate);
}

open(NEWS, "NEWS");
$timestamp = `date`;
chop $timestamp;
$release = "unknown";
$lines = "unknown";
$date = "unknown";
$jdate = "unknown";
print <<EOF;
# Population data from fetchmail NEWS file, as of $timestamp.
#
# Output other than pass-through % lines is tab-separated fields.
# Field 1: release ID
# Field 2: count of source lines under version control 
# Field 3: count of fetchmail-friends subscribers
# Field 4: count of fetchmail-announce subscribers
# Field 5: total subscribers to both lists
# Field 6: date of release (days since first datum)
# Field 7: date of release (RFC822 date format)
#
EOF
while ($_ = <NEWS>)
{
    my($sum);

    if (/^%/) {
	print $_;
    }
    elsif (/^fetchmail-([^ ]*) \(([^)]+)\)(, [0-9]* lines)?:/) {
	$release = $1;
	$date = $2;
	$jdate = &day_offset($date);
	if ($3) {
	    $lines = substr($3, 2, length($3) - 8);
	} else {
	    $lines = 'na'
	}
    }
    elsif (/There are ([0-9]*) people on fetchmail-friends and ([0-9]*) on fetchmail-announce/) {
	$sum = $1 + $2;
	print "${release}\t${lines}\t$1\t$2\t${sum}\t${jdate}\t${date}\n";
	$release = "unknown";
	$date = "unknown";
    }
    elsif (/There are ([0-9]*) people on the fetchmail-friends list./) {
	print "$release\t${lines}\t$1\t0\t$1\t$jdate\t$date\n";
	$release = "unknown";
	$date = "unknown";
    }
}

# end
an class="n">args = fscanf(lockfp, "%d %d", &pid, &st); bkgd = (args == 2); if (ferror(lockfp)) { fprintf(stderr, GT_("fetchmail: error reading lockfile \"%s\": %s\n"), lockfile, strerror(errno)); fclose(lockfp); /* not checking should be safe, file mode was "r" */ exit(PS_EXCLUDE); } fclose(lockfp); /* not checking should be safe, file mode was "r" */ if (args == EOF || args == 0 || kill(pid, 0) == -1) { /* ^ could not read PID || process does not exist */ /* => lockfile is stale, unlink it */ pid = 0; fprintf(stderr,GT_("fetchmail: removing stale lockfile\n")); if (unlink(lockfile)) { if (errno != ENOENT) { perror(lockfile); /* we complain but we don't exit; it might be * writable for us, but in a directory we cannot * write to. This means we can write the new PID to * the file. Truncate to be safe in case the PID is * recycled by another process later. * \bug we should use fcntl() style locks or * something else instead in a future release. */ if (truncate(lockfile, (off_t)0)) { /* but if we cannot truncate the file either, * assume that we cannot write to it later, * complain and quit. */ perror(lockfile); exit(PS_EXCLUDE); } } } } } else { pid = 0; if (errno != ENOENT) { fprintf(stderr, GT_("fetchmail: error opening lockfile \"%s\": %s\n"), lockfile, strerror(errno)); exit(PS_EXCLUDE); } } return(bkgd ? -pid : pid); } void fm_lock_assert(void) /* assert that we already possess a lock */ { lock_acquired = TRUE; } void fm_lock_or_die(void) /* get a lock on a given host or exit */ { int fd; char tmpbuf[50]; if (!lock_acquired) { int e = 0; if ((fd = open(lockfile, O_WRONLY|O_CREAT|O_EXCL, 0666)) != -1) { ssize_t wr; snprintf(tmpbuf, sizeof(tmpbuf), "%ld\n", (long)getpid()); wr = write(fd, tmpbuf, strlen(tmpbuf)); if (wr == -1 || (size_t)wr != strlen(tmpbuf)) e = 1; if (run.poll_interval) { snprintf(tmpbuf, sizeof(tmpbuf), "%d\n", run.poll_interval); wr = write(fd, tmpbuf, strlen(tmpbuf)); if (wr == -1 || (size_t)wr != strlen(tmpbuf)) e = 1; } if (fsync(fd)) e = 1; if (close(fd)) e = 1; } else { e = 1; } if (e == 0) { lock_acquired = TRUE; } else { perror(lockfile); fprintf(stderr, GT_("fetchmail: lock creation failed.\n")); exit(PS_EXCLUDE); } } } void fm_lock_release(void) /* release a lock on a given host */ { unlink(lockfile); } /* lock.c ends here */