123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- /*
- ***********************************************************************
- *
- * Copyright: Daniel Measurement and Control, Inc.
- * 9753 Pine Lake Drive
- * Houston, TX 77055
- *
- * Created by: Vipin Malik
- * Released under GPL by permission of Daniel Industries.
- *
- * This software is licensed under the GPL version 2. Plese see the file
- * COPYING for details on the license.
- *
- * NO WARRANTY: Absolutely no claims of warranty or fitness of purpose
- * are made in this software. Please use at your own risk.
- *
- File: plotJittervsFill.c
- By: Vipin Malik
- About: This program reads in a jitter log file as created
- by the JitterTest.c program and extracts all the jitters
- in the file that are greater than a threshold specified
- as a parameter on the cmd line. It also extracts the
- amount of disk space at (form the "df" out that should also
- be present in the log file) after the jitter extracted.
- It writes the data to the stderr (where you may redirect it).
- It is suitable for plotting, as the data is written as
- COL1=UsedSpace COL2=Jitter
- $Id: plotJittervsFill.c,v 1.6 2005/11/07 11:15:21 gleixner Exp $
- $Log: plotJittervsFill.c,v $
- Revision 1.6 2005/11/07 11:15:21 gleixner
- [MTD / JFFS2] Clean up trailing white spaces
- Revision 1.5 2001/08/10 19:23:11 vipin
- Ready to be released under GPL! Added proper headers etc.
- Revision 1.4 2001/07/02 22:25:40 vipin
- Fixed couple of minor cosmetic typos.
- Revision 1.3 2001/07/02 14:46:46 vipin
- Added a debug option where it o/p's line numbers to debug funky values.
- Revision 1.2 2001/06/26 19:48:57 vipin
- Now prints out jitter values found at end of log file, after which
- no new "df" disk usage values were encountered. The last "df" disk usage
- encountered is printed for these orphaned values.
- Revision 1.1 2001/06/25 19:13:55 vipin
- Added new file- plotJittervsFill.c- that mines the data log file
- outputed from the fillFlash.sh script file and JitterTest.c file
- and produces output suitable to be plotted.
- This output plot may be examined to see visually the relationship
- of the Jitter vs disk usage of the fs under test.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <fcntl.h>
- #define PROGRAM_NAME "plotJittervsFill"
- #include "common.h"
- static char LogFile[250] = "InputLogFile.log";
- static int JitterThreshold_ms = 1000;
- static int Debug = 0; /* Debug level. Each "-d" on the cmd line increases the level */
- #define TRUE 1
- #define FALSE 0
- #define MIN_JITTER_THRESHOLD 1 /* ms minimum jitter threshold */
- static void PrintHelpInfo(void)
- {
- printf("Usage: plotJittervsFill [options] -f [--file] <input log file name> -t [--jitter_threshold] <jitter threshold in ms>\n");
- printf("[options]:\n-v [--version] Print version and exit\n");
- printf("-d Debug. Prints input file line number for each data point picked up.\n");
- printf("-h [--help] [-?] Print this help screen and exit.\n");
- }
- /***********************************************************************
- * HandleCmdLineArgs
- * This function handles the command line arguments.
- * output: stack size
- ***********************************************************************/
- static void HandleCmdLineArgs(
- int argc, /* number of command-line arguments */
- char *argv[]) /* ptrs to command-line arguments */
- {
- int argNum; /* argument number */
- if (argc > (int) 1) {
- for (argNum = (int) 1; argNum < argc; argNum++) {
- /* The command line contains an argument. */
- if ((strcmp(argv[argNum],"--version") == 0) ||
- (strcmp(argv[argNum],"-v") == 0)) {
- /* Print version information and exit. */
- common_print_version();
- exit(0);
- }
- else if ((strcmp(argv[argNum],"--help") == 0) ||
- (strcmp(argv[argNum],"-h") == 0) ||
- (strcmp(argv[argNum],"-?") == 0)) {
- /* Print help information and exit. */
- PrintHelpInfo();
- exit(0);
- }
- else if ((strcmp(argv[argNum],"--file") == 0) ||
- (strcmp(argv[argNum],"-f") == 0)) {
- /* Set the name of the output file. */
- ++argNum;
- if (argNum < argc) {
- strncpy(LogFile, argv[argNum], sizeof(LogFile));
- }
- else {
- printf("*** Input file name not specified. ***\n");
- exit(0);
- }
- }
- else if ((strcmp(argv[argNum],"--jitter_threshold") == 0) ||
- (strcmp(argv[argNum],"-t") == 0)) {
- /* Set the file to read*/
- ++argNum;
- JitterThreshold_ms = atoi(argv[argNum]);
- if(JitterThreshold_ms < MIN_JITTER_THRESHOLD)
- {
- printf("A jitter threshold less than %i ms is not allowed. Bye.\n",
- MIN_JITTER_THRESHOLD);
- exit(0);
- }
- }
- else if ((strcmp(argv[argNum],"-d") == 0))
- {
- /* Increment debug level */
- Debug++;
- }
- else {
- /* Unknown argument. Print help information and exit. */
- printf("Invalid option %s\n", argv[argNum]);
- printf("Try 'plotJittervsFill --help' for more information.\n");
- exit(0);
- }
- }
- }
- return;
- }
- int main(
- int argc,
- char *argv[])
- {
- char lineBuf[1024]; /* how long a single line be? */
- int converted;
- int lineNo = 0;
- int cnt;
- FILE *fp;
- int junkInt1, junkInt2, junkInt3;
- float junkFloat1;
- float jitter_ms;
- #define MAX_SAVE_BUFFER 1000 /* How many values will be picked up while searching for
- a % disk full line (i.e. before they can be printed out)
- */
- int saveJitter[MAX_SAVE_BUFFER]; /* lets us record multiple jitter values that exceed
- our threshold till we find a "df" field- which is when
- we can o/p all these values.
- */
- int dataLineNo[MAX_SAVE_BUFFER]; /* The saved line #'s for the above. Printed if debug specified. */
- int saveJitterCnt = 0;
- int lookFor_df = FALSE;
- int dfPercent = -1; /* will be >= 0 if at least one found. The init value is a flag. */
- char junkStr1[500], junkStr2[500];
- HandleCmdLineArgs(argc, argv);
- if((fp = fopen(LogFile, "r")) == NULL)
- {
- printf("Unable to open input log file %s for read.\b", LogFile);
- perror("Error:");
- exit(1);
- }
- while(fgets(lineBuf, sizeof(lineBuf), fp) != NULL)
- {
- lineNo++;
- /* Are we looking for a "df" o/p line? (to see how full
- the flash is?)*/
- /* is there a "%" in this line? */
- if((strstr(lineBuf, "%") != NULL) && (lookFor_df))
- {
- converted = sscanf(lineBuf, "%s %i %i %i %i\n",
- junkStr1, &junkInt1, &junkInt2, &junkInt3, &dfPercent);
- if(converted < 5)
- {
- printf("Line %i contains \"%%\", but expected fields not found. Skipping.\n", lineNo);
- }else
- {
- /* Now print out the saved jitter values (in col2) with this dfPercent value as the col1. */
- for(cnt = 0; cnt < saveJitterCnt; cnt++)
- {
- if(Debug)
- {
- fprintf(stderr, "%i\t%i\t%i\n", (int)dataLineNo[cnt],
- dfPercent, (int)saveJitter[cnt]);
- }else
- {
- fprintf(stderr, "%i\t%i\n", dfPercent, (int)saveJitter[cnt]);
- }
- }
- saveJitterCnt = 0; /* all flushed. Reset for next saves. */
- lookFor_df = FALSE;
- }
- }
- /* is there a "ms" in this line?*/
- if(strstr(lineBuf, "ms") == NULL)
- {
- continue;
- }
- /* grab the ms jitter value */
- converted = sscanf(lineBuf, "%f %s %f %s\n", &junkFloat1, junkStr1, &jitter_ms, junkStr2);
- if(converted < 4)
- {
- printf("Line %i contains \"ms\", but expected fields not found. Converted %i, Skipping.",
- lineNo, converted);
- printf("1=%i, 2=%s.\n", junkInt1, junkStr1);
- continue; /* not our jitter line*/
- }
- /* Is the jitter value > threshold value? */
- if(abs((int)jitter_ms) > JitterThreshold_ms)
- {
- /* Found a jitter line that matches our crietrion.
- Now set flag to be on the look out for the next
- "df" output so that we can see how full the flash is.
- */
- if(saveJitterCnt < MAX_SAVE_BUFFER)
- {
- saveJitter[saveJitterCnt] = abs((int)jitter_ms); /* why keep the (ms) jitter in float */
- dataLineNo[saveJitterCnt] = lineNo;
- saveJitterCnt++;
- lookFor_df = TRUE;
- }
- else
- {
- printf("Oops! I've run out of buffer space before I found a %% use line. Dropping itter value. Increase MAX_SAVE_BUFFER and recompile.\n");
- }
- }
- }
- /* Now print out any saved jitter values that were not printed out because we did not find
- and "df" after these were picked up. Only print if a "df" disk usage was ever found.
- */
- if(lookFor_df && (dfPercent >= 0))
- {
- /* Now print out the saved jitter values (in col2) with this dfPercent value as the col1. */
- for(cnt = 0; cnt < saveJitterCnt; cnt++)
- {
- fprintf(stderr, "%i\t%i\n", dfPercent, (int)saveJitter[cnt]);
- }
- }
- return 0;
- }/* end main() */
|