2 * Copyright (c) 1997-2001 Silicon Graphics, Inc. All Rights Reserved.
6 * eol - exercise _pmLogFindEOF
13 printstamp(struct timeval
*tp
)
15 static struct tm
*tmp
;
17 tmp
= localtime(&tp
->tv_sec
);
18 printf("%02d:%02d:%02d.%03d", tmp
->tm_hour
, tmp
->tm_min
, tmp
->tm_sec
, (int)(tp
->tv_usec
/1000));
22 main(int argc
, char **argv
)
28 char *host
= NULL
; /* pander to gcc */
29 pmLogLabel label
; /* get hostname for archives */
30 char *namespace = PM_NS_DEFAULT
;
35 char *name
[] = { "sample.seconds", "sample.drift", "sample.milliseconds" };
37 __pmSetProgname(argv
[0]);
39 while ((c
= getopt(argc
, argv
, "a:D:n:s:?")) != EOF
) {
42 case 'a': /* archive name */
44 fprintf(stderr
, "%s: at most one of -a and/or -h allowed\n", pmProgname
);
47 ahtype
= PM_CONTEXT_ARCHIVE
;
53 case 'D': /* debug flag */
54 sts
= __pmParseDebug(optarg
);
56 fprintf(stderr
, "%s: unrecognized debug flag specification (%s)\n",
65 case 'n': /* alternative name space file */
78 "Usage: %s options ...\n\
81 -a archive metrics source is an archive log\n\
82 -n namespace use an alternative PMNS\n",
87 if ((sts
= pmLoadASCIINameSpace(namespace, 1)) < 0) {
88 printf("%s: Cannot load namespace from \"%s\": %s\n", pmProgname
, namespace, pmErrStr(sts
));
92 if (ahtype
!= PM_CONTEXT_ARCHIVE
) {
93 fprintf(stderr
, "%s: -a is not optional!\n", pmProgname
);
96 if ((sts
= pmNewContext(ahtype
, host
)) < 0) {
97 fprintf(stderr
, "%s: Cannot open archive \"%s\": %s\n",
98 pmProgname
, host
, pmErrStr(sts
));
102 if ((sts
= pmGetArchiveLabel(&label
)) < 0) {
103 fprintf(stderr
, "%s: Cannot get archive label record: %s\n",
104 pmProgname
, pmErrStr(sts
));
108 /* non-flag args are argv[optind] ... argv[argc-1] */
111 while (optind
< argc
&& numpmid
< 3) {
112 name
[numpmid
] = argv
[optind
];
113 printf("metric[%d]: %s\n", numpmid
, name
[numpmid
]);
119 sts
= pmGetArchiveEnd(&end
);
121 printf("pmGetArchiveEnd: %s\n", pmErrStr(sts
));
124 printf("pmGetArchiveEnd time: ");
128 printf("required %d log reads\n", __pmLogReads
);
132 sts
= pmSetMode(PM_MODE_BACK
, &end
, 0);
134 printf("pmSetMode: %s\n", pmErrStr(sts
));
137 sts
= pmFetchArchive(&result
);
139 printf("pmFetchArchive: %s\n", pmErrStr(sts
));
142 printf("last result time (direct): ");
143 printstamp(&result
->timestamp
);
145 pmFreeResult(result
);
147 printf("required %d log reads\n", __pmLogReads
);
151 end
.tv_sec
= 0x7fffffff;
153 sts
= pmSetMode(PM_MODE_BACK
, &end
, 0);
155 printf("pmSetMode: %s\n", pmErrStr(sts
));
158 sts
= pmFetchArchive(&result
);
160 printf("pmFetchArchive: %s\n", pmErrStr(sts
));
163 printf("last result time (indirect): ");
164 printstamp(&result
->timestamp
);
166 pmFreeResult(result
);
168 printf("required %d log reads\n", __pmLogReads
);
172 prev
= (pmResult
*)0;
174 sts
= pmSetMode(PM_MODE_FORW
, &end
, 0);
176 printf("pmSetMode: %s\n", pmErrStr(sts
));
179 while ((sts
= pmFetchArchive(&result
)) >= 0) {
180 if (prev
!= (pmResult
*)0)
184 printf("pmFetchArchive: %s\n", pmErrStr(sts
));
185 if (prev
== (pmResult
*)0) {
186 printf("no results!\n");
189 printf("last result time (serial): ");
190 printstamp(&prev
->timestamp
);
194 printf("required %d log reads\n", __pmLogReads
);