Changeset: 8b847348dd0e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8b847348dd0e
Modified Files:
clients/mapiclient/stethoscope.c
Branch: Feb2013
Log Message:
stethoscope: inline doProfile in main
diffs (truncated from 404 to 300 lines):
diff --git a/clients/mapiclient/stethoscope.c b/clients/mapiclient/stethoscope.c
--- a/clients/mapiclient/stethoscope.c
+++ b/clients/mapiclient/stethoscope.c
@@ -86,18 +86,7 @@ static struct {
/* 3 */ { 0, 0, 0, 0 }
};
-static struct _wthread {
- char *uri;
- char *host;
- char *dbname;
- int port;
- char *user;
- char *pass;
- stream *s;
- size_t argc;
- char **argv;
-} wthr;
-
+static stream *conn = NULL;
static char hostname[128];
static void
@@ -138,7 +127,8 @@ static void
stopListening(int i)
{
(void)i;
- mnstr_close(wthr.s);
+ if (conn != NULL)
+ mnstr_close(conn);
}
static int
@@ -158,171 +148,29 @@ setCounter(char *nme)
#define die(dbh, hdl) while (1) {(hdl ? mapi_explain_query(hdl, stderr) : \
dbh ? mapi_explain(dbh, stderr) :
\
- fprintf(stderr, "!! %scommand
failed\n", id)); \
+ fprintf(stderr, "!! command
failed\n")); \
goto stop_disconnect;}
#define doQ(X) \
if ((hdl = mapi_query(dbh, X)) == NULL || mapi_error(dbh) != MOK) \
die(dbh, hdl);
-static void
-doProfile(void)
-{
- int i;
- size_t a;
- ssize_t n;
- char *response, *x;
- char buf[BUFSIZ + 1];
- char *e;
- char *mod, *fcn;
- char *host = NULL;
- int portnr;
- char id[10];
- Mapi dbh;
- MapiHdl hdl = NULL;
-
- /* set up the profiler */
- id[0] = '\0';
- if (wthr.uri)
- dbh = mapi_mapiuri(wthr.uri, wthr.user, wthr.pass, "mal");
- else
- dbh = mapi_mapi(wthr.host, wthr.port, wthr.user, wthr.pass,
"mal", wthr.dbname);
- if (dbh == NULL || mapi_error(dbh))
- die(dbh, hdl);
- mapi_reconnect(dbh);
- if (mapi_error(dbh))
- die(dbh, hdl);
- host = strdup(mapi_get_host(dbh));
- if (*host == '/') {
- fprintf(stderr, "!! UNIX domain socket not supported\n");
- goto stop_disconnect;
- }
-#ifdef _DEBUG_STETHOSCOPE_
- printf("-- connection with server %s\n", wthr.uri ? wthr.uri : host);
-#endif
-
- /* set counters */
- x = NULL;
- for (i = 0; profileCounter[i].tag; i++) {
- /* skip duplicates */
- if (x == profileCounter[i].ptag)
- continue;
- /* deactivate any left over counter first */
- snprintf(buf, BUFSIZ, "profiler.deactivate(\"%s\");",
- profileCounter[i].ptag);
- doQ(buf);
- if (profileCounter[i].status) {
- snprintf(buf, BUFSIZ, "profiler.activate(\"%s\");",
- profileCounter[i].ptag);
- doQ(buf);
-#ifdef _DEBUG_STETHOSCOPE_
- printf("-- %s\n", buf);
-#endif
- }
- x = profileCounter[i].ptag;
- }
-
- for (portnr = 50010; portnr < 62010; portnr++) {
- if ((wthr.s = udp_rastream(host, portnr, "profileStream")) !=
NULL)
- break;
- }
- if (wthr.s == NULL) {
- fprintf(stderr, "!! %sopening stream failed: no free ports
available\n",
- id);
- goto stop_cleanup;
- }
-
- printf("-- opened UDP profile stream %s:%d for %s\n",
- hostname, portnr, host);
-
- snprintf(buf, BUFSIZ, "port := profiler.openStream(\"%s\", %d);",
- hostname, portnr);
- doQ(buf);
-
- /* Set Filters */
- doQ("profiler.setNone();");
-
- if (wthr.argc == 0) {
-#ifdef _DEBUG_STETHOSCOPE_
- printf("-- profiler.setAll();\n");
-#endif
- doQ("profiler.setAll();");
- } else {
- for (a = 0; a < wthr.argc; a++) {
- char *c;
- char *arg = strdup(wthr.argv[a]);
- c = strchr(arg, '.');
- if (c) {
- mod = arg;
- if (mod == c)
- mod = "*";
- fcn = c + 1;
- if (*fcn == 0)
- fcn = "*";
- *c = 0;
- } else {
- fcn = arg;
- mod = "*";
- }
- snprintf(buf, BUFSIZ,
"profiler.setFilter(\"%s\",\"%s\");", mod, fcn);
-#ifdef _DEBUG_STETHOSCOPE_
- printf("-- %s\n", buf);
-#endif
- doQ(buf);
- free(arg);
- }
- }
-#ifdef _DEBUG_STETHOSCOPE_
- printf("-- profiler.start();\n");
-#endif
- doQ("profiler.start();");
- fflush(NULL);
-
- i = 0;
- while ((n = mnstr_read(wthr.s, buf, 1, BUFSIZ)) > 0) {
- buf[n] = 0;
- response = buf;
- while ((e = strchr(response, '\n')) != NULL) {
- *e = 0;
- printf("%s\n", response);
- response = e + 1;
- }
- /* handle last line in buffer */
- if (*response)
- printf("%s\n", response);
- if (++i % 200) {
- i = 0;
- fflush(NULL);
- }
- }
- fflush(NULL);
-
-stop_cleanup:
- doQ("profiler.setNone();");
- doQ("profiler.stop();");
- doQ("profiler.closeStream();");
-stop_disconnect:
- if (dbh) {
- mapi_disconnect(dbh);
- mapi_destroy(dbh);
- }
-
- if (host != NULL) {
- printf("-- connection with server %s closed\n", wthr.uri ?
wthr.uri : host);
-
- free(host);
- }
-}
-
int
main(int argc, char **argv)
{
- int a = 1;
- int k;
+ int i, k;
+ ssize_t n;
+ char *e;
char *host = NULL;
int portnr = 0;
char *dbname = NULL;
+ char *uri = NULL;
char *user = NULL;
char *password = NULL;
+ char *response, *x;
+ char buf[BUFSIZ + 1];
+ char *mod, *fcn;
+ Mapi dbh;
+ MapiHdl hdl = NULL;
static struct option long_options[6] = {
{ "dbname", 1, 0, 'd' },
@@ -373,17 +221,17 @@ main(int argc, char **argv)
}
}
- a = optind;
- if (argc > 1 && a < argc && argv[a][0] == '+') {
- k = setCounter(argv[a] + 1);
- a++;
+ i = optind;
+ if (argc > 1 && i < argc && argv[i][0] == '+') {
+ k = setCounter(argv[i] + 1);
+ i++;
} else
k = setCounter(COUNTERSDEFAULT);
/* DOT needs function id and PC to correlate */
if (profileCounter[32].status) {
- profileCounter[3].status= k++;
- profileCounter[4].status= k;
+ profileCounter[3].status = k++;
+ profileCounter[4].status = k;
}
if (user == NULL)
@@ -391,6 +239,15 @@ main(int argc, char **argv)
if (password == NULL)
password = simple_prompt("password", BUFSIZ, 0, NULL);
+ close(0); /* get rid of stdin */
+
+ /* our hostname, how remote servers have to contact us */
+ gethostname(hostname, sizeof(hostname));
+
+ /* forget about the options we've parsed */
+ argc = argc - i;
+ argv = &argv[i];
+
#ifdef SIGPIPE
signal(SIGPIPE, stopListening);
#endif
@@ -403,21 +260,135 @@ main(int argc, char **argv)
signal(SIGINT, stopListening);
signal(SIGTERM, stopListening);
- close(0); /* get rid of stdin */
+ /* set up the profiler */
+ if (uri)
+ dbh = mapi_mapiuri(uri, user, password, "mal");
+ else
+ dbh = mapi_mapi(host, portnr, user, password, "mal", dbname);
+ if (dbh == NULL || mapi_error(dbh))
+ die(dbh, hdl);
+ mapi_reconnect(dbh);
+ if (mapi_error(dbh))
+ die(dbh, hdl);
+ host = strdup(mapi_get_host(dbh));
+ if (*host == '/') {
+ fprintf(stderr, "!! UNIX domain socket not supported\n");
+ goto stop_disconnect;
+ }
+#ifdef _DEBUG_STETHOSCOPE_
+ printf("-- connection with server %s\n", uri ? uri : host);
+#endif
- /* our hostname, how remote servers have to contact us */
- gethostname(hostname, sizeof(hostname));
+ /* set counters */
+ x = NULL;
+ for (i = 0; profileCounter[i].tag; i++) {
+ /* skip duplicates */
+ if (x == profileCounter[i].ptag)
+ continue;
+ /* deactivate any left over counter first */
+ snprintf(buf, BUFSIZ, "profiler.deactivate(\"%s\");",
+ profileCounter[i].ptag);
+ doQ(buf);
+ if (profileCounter[i].status) {
+ snprintf(buf, BUFSIZ, "profiler.activate(\"%s\");",
+ profileCounter[i].ptag);
+ doQ(buf);
+#ifdef _DEBUG_STETHOSCOPE_
+ printf("-- %s\n", buf);
+#endif
+ }
+ x = profileCounter[i].ptag;
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list