2 * Copyright (c) 1997-2001 Silicon Graphics, Inc. All Rights Reserved.
6 * EOL and clock advancing in interpolate mode
15 static pmID pmidlist
[20];
16 static char *namelist
[20];
17 static double delta
= 500;
20 cmpres(int n
, pmResult
*e
, pmResult
*g
)
26 if (e
->timestamp
.tv_sec
!= g
->timestamp
.tv_sec
||
27 e
->timestamp
.tv_usec
!= g
->timestamp
.tv_usec
) {
28 printf("[sample %d] pmResult.timestamp: expected %ld.%06ld, got %ld.%06ld\n",
29 n
, (long)e
->timestamp
.tv_sec
, (long)e
->timestamp
.tv_usec
,
30 (long)g
->timestamp
.tv_sec
, (long)g
->timestamp
.tv_usec
);
33 if (e
->numpmid
!= g
->numpmid
) {
34 printf("[sample %d] pmResult.numpmid: expected %d, got %d\n",
35 n
, e
->numpmid
, g
->numpmid
);
39 for (i
= 0; i
< e
->numpmid
; i
++) {
40 if (e
->vset
[i
]->pmid
!= g
->vset
[i
]->pmid
) {
41 printf("[sample %d] pmResult.vset[%d].pmid: expected %s",
42 n
, i
, pmIDStr(e
->vset
[i
]->pmid
));
43 printf(" got %s\n", pmIDStr(g
->vset
[i
]->pmid
));
46 if (e
->vset
[i
]->numval
!= g
->vset
[i
]->numval
) {
47 printf("[sample %d] pmResult.vset[%d].numval: expected %d, got %d\n",
48 n
, i
, e
->vset
[i
]->numval
, g
->vset
[i
]->numval
);
52 if (e
->vset
[i
]->valfmt
!= g
->vset
[i
]->valfmt
) {
53 printf("[sample %d] pmResult.vset[%d].valfmt: expected %d, got %d\n",
54 n
, i
, e
->vset
[i
]->valfmt
, g
->vset
[i
]->valfmt
);
58 if (e
->vset
[i
]->valfmt
!= PM_VAL_INSITU
)
60 for (j
= 0; j
< e
->vset
[i
]->numval
; j
++) {
61 if (e
->vset
[i
]->vlist
[j
].inst
!= g
->vset
[i
]->vlist
[j
].inst
) {
62 printf("[sample %d] pmResult.vset[%d].vlist[%d].inst: expected %d, got %d\n",
63 n
, i
, j
, e
->vset
[i
]->vlist
[j
].inst
, g
->vset
[i
]->vlist
[j
].inst
);
66 if (e
->vset
[i
]->vlist
[j
].value
.lval
!= g
->vset
[i
]->vlist
[j
].value
.lval
) {
67 printf("[sample %d] pmResult.vset[%d].vlist[%d].lval: expected %d, got %d\n",
68 n
, i
, j
, e
->vset
[i
]->vlist
[j
].value
.lval
, g
->vset
[i
]->vlist
[j
].value
.lval
);
78 printf("Expected ...\n");
79 __pmDumpResult(stdout
, e
);
81 __pmDumpResult(stdout
, g
);
85 main(int argc
, char **argv
)
91 char *archive
= "foo";
92 char *namespace = PM_NS_DEFAULT
;
93 static char *usage
= "[-a archive] [-n namespace] [-T] [-t delta] [-v]";
98 pmResult
**resvec
= malloc(0);
102 __pmSetProgname(argv
[0]);
104 while ((c
= getopt(argc
, argv
, "a:D:n:Tt:v")) != EOF
) {
107 case 'a': /* archive */
111 case 'D': /* debug flag */
112 sts
= __pmParseDebug(optarg
);
114 fprintf(stderr
, "%s: unrecognized debug flag specification (%s)\n",
122 case 'n': /* alternative name space file */
126 case 'v': /* verbose output */
130 case 'T': /* trim namespace */
134 case 't': /* sample interval */
135 delta
= 1000 * atof(optarg
);
146 printf("Usage: %s %s\n", pmProgname
, usage
);
150 if ((sts
= pmLoadASCIINameSpace(namespace, 1)) < 0) {
151 printf("%s: Cannot load namespace from \"%s\": %s\n", pmProgname
, namespace, pmErrStr(sts
));
155 if ((ctx
= pmNewContext(PM_CONTEXT_ARCHIVE
, archive
)) < 0) {
156 printf("%s: Cannot connect to archive \"%s\": %s\n", pmProgname
, archive
, pmErrStr(ctx
));
159 if ((sts
= pmGetArchiveLabel(&loglabel
)) < 0) {
160 printf("%s: pmGetArchiveLabel(%d): %s\n", pmProgname
, ctx
, pmErrStr(sts
));
164 when
= loglabel
.ll_start
;
165 if ((sts
= pmSetMode(PM_MODE_INTERP
, &when
, delta
)) < 0) {
166 printf("%s: pmSetMode: %s\n", pmProgname
, pmErrStr(sts
));
174 * metrics biased towards log "foo"
177 namelist
[i
++] = "sample.seconds";
180 sts
= pmLookupName(numpmid
, namelist
, pmidlist
);
182 printf("pmLookupName: %s\n", pmErrStr(sts
));
183 for (i
= 0; i
< numpmid
; i
++) {
184 if (pmidlist
[i
] == PM_ID_NULL
)
185 printf(" %s - not known\n", namelist
[i
]);
189 printf("\nPass 1: forward scan\n");
192 if ((sts
= pmFetch(numpmid
, pmidlist
, &resp
)) < 0) {
193 if (sts
!= PM_ERR_EOL
)
194 printf("%s: pmFetch: %s\n", pmProgname
, pmErrStr(sts
));
198 resvec
= (pmResult
**)realloc(resvec
, resnum
* sizeof(resvec
[0]));
199 resvec
[resnum
- 1] = resp
;
201 __pmDumpResult(stdout
, resp
);
202 when
= resp
->timestamp
;
205 printf("Found %d samples\n", resnum
);
207 printf("\nPass 1.1: forwards past EOL\n");
209 for (i
= 0; i
< 10; i
++) {
210 if ((sts
= pmFetch(numpmid
, pmidlist
, &resp
)) < 0) {
211 if (sts
!= PM_ERR_EOL
)
212 printf("%s: pmFetch: %s\n", pmProgname
, pmErrStr(sts
));
214 when
.tv_usec
+= delta
* 1000;
215 if (when
.tv_usec
> 1000000) {
217 when
.tv_usec
-= 1000000;
222 printf("\nPass 1.2: backwards past EOL\n");
224 if ((sts
= pmSetMode(PM_MODE_INTERP
, &when
, -delta
)) < 0) {
225 printf("%s: pmSetMode: %s\n", pmProgname
, pmErrStr(sts
));
228 for (i
= 0; i
< 10; i
++) {
229 if ((sts
= pmFetch(numpmid
, pmidlist
, &resp
)) < 0) {
230 if (sts
!= PM_ERR_EOL
)
231 printf("%s: pmFetch: %s\n", pmProgname
, pmErrStr(sts
));
236 printf("\nPass 2: backwards scan\n");
240 if ((sts
= pmFetch(numpmid
, pmidlist
, &resp
)) < 0) {
241 if (sts
!= PM_ERR_EOL
)
242 printf("%s: pmFetch: %s\n", pmProgname
, pmErrStr(sts
));
246 cmpres(n
, resvec
[resnum
- n
], resp
);
247 when
= resp
->timestamp
;
251 printf("Found %d samples\n", n
);
253 printf("\nPass 2.1: backwards prior to SOL\n");
255 for (i
= 0; i
< 10; i
++) {
256 if ((sts
= pmFetch(numpmid
, pmidlist
, &resp
)) < 0) {
257 if (sts
!= PM_ERR_EOL
)
258 printf("%s: pmFetch: %s\n", pmProgname
, pmErrStr(sts
));
262 when
.tv_usec
-= delta
* 1000;
263 if (when
.tv_usec
< 0) {
265 when
.tv_usec
+= 1000000;
270 printf("\nPass 2.2: forwards prior to SOL\n");
272 if ((sts
= pmSetMode(PM_MODE_INTERP
, &when
, delta
)) < 0) {
273 printf("%s: pmSetMode: %s\n", pmProgname
, pmErrStr(sts
));
276 for (i
= 0; i
< 10; i
++) {
277 if ((sts
= pmFetch(numpmid
, pmidlist
, &resp
)) < 0) {
278 if (sts
!= PM_ERR_EOL
)
279 printf("%s: pmFetch: %s\n", pmProgname
, pmErrStr(sts
));
284 printf("\nPass 3: forwards scan\n");
287 if ((sts
= pmFetch(numpmid
, pmidlist
, &resp
)) < 0) {
288 if (sts
!= PM_ERR_EOL
)
289 printf("%s: pmFetch: %s\n", pmProgname
, pmErrStr(sts
));
292 cmpres(n
, resvec
[n
], resp
);
293 pmFreeResult(resvec
[n
]);
298 printf("Found %d samples\n", n
);
300 if (resvec
!= NULL
) {
301 for (i
= 0; i
< resnum
; i
++) {
302 if (resvec
[i
] != NULL
)
303 pmFreeResult(resvec
[i
]);