2 * Main loop for the default paradynd.
5 * Revision 1.5 1994/02/28 05:09:42 markc
6 * Added pvm hooks and ifdefs.
8 * Revision 1.4 1994/02/25 13:40:55 markc
9 * Added hooks for pvm support.
11 * Revision 1.3 1994/02/24 04:32:33 markc
12 * Changed header files to reflect igen changes. main.C does not look at the number of command line arguments now.
14 * Revision 1.2 1994/02/01 18:46:52 hollings
15 * Changes for adding perfConsult thread.
17 * Revision 1.1 1994/01/27 20:31:27 hollings
18 * Iinital version of paradynd speaking dynRPC igend protocol.
24 #include <sys/types.h>
28 #include "util/h/list.h"
29 #include "rtinst/h/rtinst.h"
39 #include "dyninstRPC.SRVR.h"
42 extern void controllerMainLoop();
43 extern void initLibraryFunctions();
45 static dynRPC *init_pvm_code();
47 main(int argc, char *argv[])
49 int i, family, type, well_known_socket, flag;
53 initLibraryFunctions();
55 // process command line args passed in
56 // flag == 1 --> started by paradyn
57 assert (RPC_undo_arg_list (argc, argv, &machine, family, type,
58 well_known_socket, flag) == 0);
63 tp = new dynRPC(0, NULL, NULL);
67 // tell client about our metrics.
69 stuff = getMetricList();
70 for (i=0; i < stuff->count; i++) {
71 tp->newMetricCallback(stuff->elements[i].info);
77 void dynRPC::addResource(String parent, String name)
80 extern resource findResource(char*);
82 pr = findResource(parent);
83 if (pr) (void) newResource(pr, NULL, name, 0.0);
86 void dynRPC::coreProcess(int pid)
90 proc = processList.find((void *) pid);
94 String dynRPC::getStatus(int pid)
97 extern char *getProcessStatus(process *proc);
99 proc = processList.find((void *) pid);
100 return(getProcessStatus(proc));
104 // NOTE: This version of getAvailableMetrics assumes that new metrics are
105 // NOT added during execution.
107 metricInfo_Array dynRPC::getAvailableMetrics(void)
111 static metricInfo_Array metInfo;
116 stuff = getMetricList();
117 metInfo.count = stuff->count;
118 metInfo.data = (metricInfo*) calloc(sizeof(metricInfo), metInfo.count);
119 for (i=0; i < metInfo.count; i++) {
120 metInfo.data[i] = stuff->elements[i].info;
127 double dynRPC::getPredictedDataCost(String_Array focusString, String metric)
133 m = findMetric(metric);
134 l = findFocus(focusString.count, focusString.data);
136 val = guessCost(l, m);
141 void dynRPC::disableDataCollection(int mid)
144 extern void printResourceList(resourceList);
146 printf("disable of %s for RL =", getMetricName(mi->met));
147 printResourceList(mi->resList);
150 mi = allMIs.find((void *) mid);
156 int dynRPC::enableDataCollection(String_Array foucsString,String metric)
162 m = findMetric(metric);
163 l = findFocus(foucsString.count, foucsString.data);
165 id = startCollecting(l, m);
170 // not implemented yet.
172 void dynRPC::setSampleRate(double sampleInterval)
177 Boolean dynRPC::detachProgram(int program,Boolean pause)
179 return(detachProcess(program, pause));
183 // Continue program. We really should make this work on a single pid.
185 void dynRPC::continueProgram(int program)
187 continueApplication();
190 // We really should make this work on a single pid.
192 Boolean dynRPC::pauseProgram(int program)
194 return(pauseApplication());
197 Boolean dynRPC::startProgram(int program)
199 continueApplication();
204 // This is not implemented yet.
206 Boolean dynRPC::attachProgram(int pid)
212 // start a new program for the tool.
214 int dynRPC::addExecutable(int argc,String_Array argv)
216 return(addProcess(argc, argv.data));
225 extern int PDYN_initForPVM (char **, char *, int, int, int, int);
226 extern int PDYN_initFds (dynRPC*);
228 assert (PDYN_initForPVM (argv, machine, family, type, well_known_socket,
231 // connect to paradyn
233 tp = new dynRPC(0, NULL, NULL);
236 tp = new dynRPC(family, well_known_socket, type, machine, NULL, NULL);
237 tp->reportSelf (machine, argv[0], getpid());