qa: update 660 to generate index.html, fixing pcp-testsuite runs
[pcp.git] / qa / src / eol.c
blob4f5423e59d6445c76268b26c3862296fe9796a13
1 /*
2 * Copyright (c) 1997-2001 Silicon Graphics, Inc. All Rights Reserved.
3 */
5 /*
6 * eol - exercise _pmLogFindEOF
7 */
9 #include <pcp/pmapi.h>
10 #include <pcp/impl.h>
12 static void
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));
21 int
22 main(int argc, char **argv)
24 int c;
25 int sts;
26 int errflag = 0;
27 int ahtype = 0;
28 char *host = NULL; /* pander to gcc */
29 pmLogLabel label; /* get hostname for archives */
30 char *namespace = PM_NS_DEFAULT;
31 pmResult *result;
32 pmResult *prev;
33 struct timeval end;
34 int numpmid = 3;
35 char *name[] = { "sample.seconds", "sample.drift", "sample.milliseconds" };
37 __pmSetProgname(argv[0]);
39 while ((c = getopt(argc, argv, "a:D:n:s:?")) != EOF) {
40 switch (c) {
42 case 'a': /* archive name */
43 if (ahtype != 0) {
44 fprintf(stderr, "%s: at most one of -a and/or -h allowed\n", pmProgname);
45 errflag++;
47 ahtype = PM_CONTEXT_ARCHIVE;
48 host = optarg;
49 break;
51 #ifdef PCP_DEBUG
53 case 'D': /* debug flag */
54 sts = __pmParseDebug(optarg);
55 if (sts < 0) {
56 fprintf(stderr, "%s: unrecognized debug flag specification (%s)\n",
57 pmProgname, optarg);
58 errflag++;
60 else
61 pmDebug |= sts;
62 break;
63 #endif
65 case 'n': /* alternative name space file */
66 namespace = optarg;
67 break;
69 case '?':
70 default:
71 errflag++;
72 break;
76 if (errflag) {
77 fprintf(stderr,
78 "Usage: %s options ...\n\
79 \n\
80 Options\n\
81 -a archive metrics source is an archive log\n\
82 -n namespace use an alternative PMNS\n",
83 pmProgname);
84 exit(1);
87 if ((sts = pmLoadASCIINameSpace(namespace, 1)) < 0) {
88 printf("%s: Cannot load namespace from \"%s\": %s\n", pmProgname, namespace, pmErrStr(sts));
89 exit(1);
92 if (ahtype != PM_CONTEXT_ARCHIVE) {
93 fprintf(stderr, "%s: -a is not optional!\n", pmProgname);
94 exit(1);
96 if ((sts = pmNewContext(ahtype, host)) < 0) {
97 fprintf(stderr, "%s: Cannot open archive \"%s\": %s\n",
98 pmProgname, host, pmErrStr(sts));
99 exit(1);
102 if ((sts = pmGetArchiveLabel(&label)) < 0) {
103 fprintf(stderr, "%s: Cannot get archive label record: %s\n",
104 pmProgname, pmErrStr(sts));
105 exit(1);
108 /* non-flag args are argv[optind] ... argv[argc-1] */
109 if (optind < argc) {
110 numpmid = 0;
111 while (optind < argc && numpmid < 3) {
112 name[numpmid] = argv[optind];
113 printf("metric[%d]: %s\n", numpmid, name[numpmid]);
114 optind++;
115 numpmid++;
119 sts = pmGetArchiveEnd(&end);
120 if (sts < 0) {
121 printf("pmGetArchiveEnd: %s\n", pmErrStr(sts));
123 else {
124 printf("pmGetArchiveEnd time: ");
125 printstamp(&end);
126 printf("\n");
128 printf("required %d log reads\n", __pmLogReads);
129 __pmLogReads = 0;
131 putchar('\n');
132 sts = pmSetMode(PM_MODE_BACK, &end, 0);
133 if (sts < 0) {
134 printf("pmSetMode: %s\n", pmErrStr(sts));
135 exit(1);
137 sts = pmFetchArchive(&result);
138 if (sts < 0) {
139 printf("pmFetchArchive: %s\n", pmErrStr(sts));
141 else {
142 printf("last result time (direct): ");
143 printstamp(&result->timestamp);
144 printf("\n");
145 pmFreeResult(result);
147 printf("required %d log reads\n", __pmLogReads);
148 __pmLogReads = 0;
150 putchar('\n');
151 end.tv_sec = 0x7fffffff;
152 end.tv_usec = 0;
153 sts = pmSetMode(PM_MODE_BACK, &end, 0);
154 if (sts < 0) {
155 printf("pmSetMode: %s\n", pmErrStr(sts));
156 exit(1);
158 sts = pmFetchArchive(&result);
159 if (sts < 0) {
160 printf("pmFetchArchive: %s\n", pmErrStr(sts));
162 else {
163 printf("last result time (indirect): ");
164 printstamp(&result->timestamp);
165 printf("\n");
166 pmFreeResult(result);
168 printf("required %d log reads\n", __pmLogReads);
169 __pmLogReads = 0;
171 putchar('\n');
172 prev = (pmResult *)0;
173 end.tv_sec = 0;
174 sts = pmSetMode(PM_MODE_FORW, &end, 0);
175 if (sts < 0) {
176 printf("pmSetMode: %s\n", pmErrStr(sts));
177 exit(1);
179 while ((sts = pmFetchArchive(&result)) >= 0) {
180 if (prev != (pmResult *)0)
181 pmFreeResult(prev);
182 prev = result;
184 printf("pmFetchArchive: %s\n", pmErrStr(sts));
185 if (prev == (pmResult *)0) {
186 printf("no results!\n");
188 else {
189 printf("last result time (serial): ");
190 printstamp(&prev->timestamp);
191 printf("\n");
192 pmFreeResult(prev);
194 printf("required %d log reads\n", __pmLogReads);
195 __pmLogReads = 0;
197 exit(0);