summaryrefslogtreecommitdiffstats
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/stpd/ChangeLog10
-rw-r--r--runtime/stpd/librelay.c15
-rw-r--r--runtime/stpd/stpd.c14
3 files changed, 34 insertions, 5 deletions
diff --git a/runtime/stpd/ChangeLog b/runtime/stpd/ChangeLog
index 01a8ef18..2fd03259 100644
--- a/runtime/stpd/ChangeLog
+++ b/runtime/stpd/ChangeLog
@@ -1,5 +1,15 @@
2005-10-19 Tom Zanussi <zanussi@us.ibm.com>
+ * librelay.c: Move output_file var to stpd.c.
+ (stp_main_loop): If the output_file option was specified,
+ and streaming mode is being used, send output to the file
+ instead of stdout. If !streaming, send output to the file
+ instead of probe.out.
+ * stpd.c (usage): Add comment for -o option.
+ (main): Add -o option.
+
+2005-10-19 Tom Zanussi <zanussi@us.ibm.com>
+
* librelay.c (merge_output): Switch to binary TIMESTAMP.
* stp_dump.c (main): Switch to binary TIMESTAMP.
* stp_merge.c (main): Switch to binary TIMESTAMP.
diff --git a/runtime/stpd/librelay.c b/runtime/stpd/librelay.c
index b173b5d5..9ed408d9 100644
--- a/runtime/stpd/librelay.c
+++ b/runtime/stpd/librelay.c
@@ -58,8 +58,8 @@ static char *percpu_tmpfilebase = "stpd_cpu";
static char proc_filebase[128];
static int proc_file[NR_CPUS];
-/* probe output written here */
-static char *outfile_name = "probe.out";
+/* probe output written here, if non-NULL */
+extern char *outfile_name;
/* internal variables */
static int transport_mode;
@@ -652,6 +652,7 @@ int stp_main_loop(void)
struct transport_start ts;
void *data;
int type;
+ FILE *ofp = stdout;
pthread_mutex_init(&processing_mutex, NULL);
@@ -700,13 +701,20 @@ int stp_main_loop(void)
fprintf(stderr, "ERROR: couldn't init relayfs, exiting\n");
exit(1);
}
+ } else if (outfile_name) {
+ ofp = fopen (outfile_name, "w");
+ if (!ofp) {
+ fprintf (stderr, "ERROR: couldn't open output file %s: errcode = %s\n",
+ outfile_name, strerror(errno));
+ exit(1);
+ }
}
ts.pid = 0; // FIXME. not implemented yet
send_request(STP_START, &ts, sizeof(ts));
break;
}
case STP_REALTIME_DATA:
- fputs ((char *)data, stdout);
+ fputs ((char *)data, ofp);
break;
case STP_OOB_DATA:
fputs ((char *)data, stderr);
@@ -732,5 +740,6 @@ int stp_main_loop(void)
fprintf(stderr, "WARNING: ignored netlink message of type %d\n", (type));
}
}
+ fclose(ofp);
return 0;
}
diff --git a/runtime/stpd/stpd.c b/runtime/stpd/stpd.c
index 2fecc380..9587d29f 100644
--- a/runtime/stpd/stpd.c
+++ b/runtime/stpd/stpd.c
@@ -41,10 +41,14 @@ unsigned int buffer_size = 0;
char *modname = NULL;
char *modpath = NULL;
char *target_cmd = NULL;
+char *outfile_name = NULL;
/* relayfs base file name */
static char stpd_filebase[1024];
+/* if no output file name is specified, use this */
+#define DEFAULT_OUTFILE_NAME "probe.out"
+
/* stp_check script */
#ifdef PKGLIBDIR
char *stp_check=PKGLIBDIR "/stp_check";
@@ -54,7 +58,7 @@ char *stp_check="stp_check";
static void usage(char *prog)
{
- fprintf(stderr, "\n%s [-m] [-p] [-q] [-r] [-c cmd ] [-t pid] [-b bufsize] kmod-name\n", prog);
+ fprintf(stderr, "\n%s [-m] [-p] [-q] [-r] [-c cmd ] [-t pid] [-b bufsize] [-o FILE] kmod-name\n", prog);
fprintf(stderr, "-m Don't merge per-cpu files.\n");
fprintf(stderr, "-p Print only. Don't log to files.\n");
fprintf(stderr, "-q Quiet. Don't display trace to stdout.\n");
@@ -63,6 +67,7 @@ static void usage(char *prog)
fprintf(stderr, " _stp_target will contain the pid for the command.\n");
fprintf(stderr, "-t pid. Sets _stp_target to pid.\n");
fprintf(stderr, "-b buffer size. The systemtap module will specify a buffer size.\n");
+ fprintf(stderr, "-o FILE. Send output to FILE.\n");
fprintf(stderr, " Setting one here will override that value. The value should be\n");
fprintf(stderr, " an integer between 1 and 64 which be assumed to be the\n");
fprintf(stderr, " buffer size in MB. That value will be per-cpu if relayfs is used.\n");
@@ -74,7 +79,7 @@ int main(int argc, char **argv)
int c, status;
pid_t pid;
- while ((c = getopt(argc, argv, "mpqrb:n:t:c:v")) != EOF)
+ while ((c = getopt(argc, argv, "mpqrb:n:t:c:vo:")) != EOF)
{
switch (c) {
case 'm':
@@ -110,6 +115,9 @@ int main(int argc, char **argv)
case 'c':
target_cmd = optarg;
break;
+ case 'o':
+ outfile_name = optarg;
+ break;
default:
usage(argv[0]);
}
@@ -160,6 +168,8 @@ int main(int argc, char **argv)
fprintf(stderr, "Could not execute %s\n", stp_check);
exit(1);
}
+ if (!outfile_name)
+ outfile_name = DEFAULT_OUTFILE_NAME;
}
sprintf(stpd_filebase, "/mnt/relay/%d/cpu", getpid());