interactive pseudo paradyn visi_thread, generates its own input values
[dyninst.git] / visi / test / client2.C
1 #include "../h/visithread.h"
2
3 #define TESTMETRIC      "blah,blah blah,metric 3,metric 4,last metric"
4 #define TESTRESOURCE    "resource1/blah1/foo1,resource2/foo2,resource3"
5
6 int numMets,numRes,numBuckets,lastBucketcollected = 0;
7 float bucketwidth;
8 visualizationUser *vup;
9
10 void Phase(){
11 char temp[32];
12   fprintf(stdout,"\nPhase:\n");   
13   sprintf(temp,"%s","psuedo_phase");
14   vup->Phase(0.0,4.5,temp);
15 }
16
17 void AddMR(int nMets, int nRes){
18
19 metricType *metrics;
20 resourceType *resources;
21 metricType_Array mets;
22 resourceType_Array res;
23 char temp[32],temp2[32];
24 int i;
25
26
27
28   fprintf(stdout,"\nAdd Metrics and Resorces:\n");   
29   metrics = (metricType *)malloc(sizeof(metricType)*nMets);
30   resources = (resourceType *)malloc(sizeof(resourceType)*nRes);
31   for(i=0;i<nMets;i++){
32      sprintf(temp,"%s%d","metric",i);
33      metrics[i].name = strdup(temp);
34      sprintf(temp2,"%s%d","units",i);
35      metrics[i].units = strdup(temp2);
36      metrics[i].Id = i;
37      metrics[i].aggregate = (i % 2);
38    }
39    mets.count = nMets;
40    mets.data = metrics;
41    for(i=0;i<nRes;i++){
42      resources[i].Id = i;
43      sprintf(temp,"%s%d","resource",i);
44      resources[i].name = strdup(temp);
45    }
46    res.count = nRes;
47    res.data = resources;
48    vup->AddMetricsResources(mets,res,bucketwidth,numBuckets);
49    for(i=0;i<nMets;i++){
50       free(metrics[i].name);
51       free(metrics[i].units);
52    }
53    for(i=0;i<nRes;i++){
54       free(resources[i].name);
55    }
56    free(metrics);
57    free(resources);
58 }
59
60 void NewMR(int nMets, int nRes){
61
62 metricType *metrics;
63 resourceType *resources;
64 metricType_Array mets;
65 resourceType_Array res;
66 char temp[32],temp2[32];
67 int i;
68
69
70
71   fprintf(stdout,"\nNew Metrics and Resorces not currently supported\n");   
72   metrics = (metricType *)malloc(sizeof(metricType)*nMets);
73   resources = (resourceType *)malloc(sizeof(resourceType)*nRes);
74   for(i=0;i<nMets;i++){
75      sprintf(temp,"%s%d","metric",i);
76      metrics[i].name = strdup(temp);
77      sprintf(temp2,"%s%d","units",i);
78      metrics[i].units = strdup(temp2);
79      metrics[i].Id = i;
80      metrics[i].aggregate = (i % 2);
81    }
82    mets.count = nMets;
83    mets.data = metrics;
84    for(i=0;i<nRes;i++){
85      resources[i].Id = i;
86      sprintf(temp,"%s%d","resource",i);
87      resources[i].name = strdup(temp);
88    }
89    res.count = nRes;
90    res.data = resources;
91    vup->NewMetricsResources(mets,res);
92    for(i=0;i<nMets;i++){
93       free(metrics[i].name);
94       free(metrics[i].units);
95    }
96    for(i=0;i<nRes;i++){
97       free(resources[i].name);
98    }
99    free(metrics);
100    free(resources);
101 }
102
103 void Fold(){
104    fprintf(stdout,"\nFold:\n");   
105    bucketwidth *= 2;
106    lastBucketcollected /= 2;
107    vup->Fold(bucketwidth);
108 }
109
110 void InvalidMR(){
111
112 int mId,rId;
113
114    fprintf(stdout,"\nInvalidate Metric and Resources:\n");   
115    mId = rand() % numMets;
116    rId = rand() % numRes;
117    vup->InvalidMR(mId,rId);
118 }
119
120 void SendData(int numTimes){
121
122 dataValue_Array blah;
123 dataValue   *data;
124 int i,j,k,m;
125
126   fprintf(stdout,"\nSend Data values to server process: num Buckets = %d\n",numTimes);   
127   for(m=0; m<numTimes; m++){
128     if(lastBucketcollected == numBuckets){
129        Fold();
130        fprintf(stdout,"Fold in SendData due to full histogram\n");
131     }
132     data = (dataValue *)malloc(sizeof(dataValue)*(numMets*numRes));
133     k = 0;
134     for(i=0;i<numMets;i++)
135       for(j=0;j<numRes;j++){
136           data[k].metricId = i;
137           data[k].resourceId = j;
138           data[k].bucketNum = lastBucketcollected; 
139           data[k].data = 1.0*(rand() % 1000);
140           k++;
141      }
142      blah.data = data;
143      blah.count = numMets*numRes;
144      lastBucketcollected++;
145      vup->Data(blah);
146   }
147   free(data);
148 }
149
150
151 main(int argc,char *argv[]){
152
153 int i=0;
154 int fd,pid;
155 char **arg_list;
156 char temp[128];
157 int wch;
158 int done;
159 int numtimes;
160
161
162   if(argc < 2){
163     fprintf(stdout,"incorrect num arguments: client2 server_executable\n");
164     fprintf(stdout,"or: client2 server_executable numMetrics numResources numBuckets bucketWidth\n");
165     exit(-1);
166   }
167   fprintf(stderr,"in client\n");
168   arg_list = new char*[2];
169   arg_list[i++] = strdup(argv[1]);
170   arg_list[i] = 0;
171
172   if(argc == 6){
173     numMets = atoi(argv[2]);
174     numRes  = atoi(argv[3]);
175     numBuckets  = atoi(argv[4]);
176     bucketwidth  = (float)atof(argv[5]);
177     fprintf(stdout," numMets = %d numRes = %d numBuckets = %d bucketwidth = %f\n",numMets,numRes,numBuckets,bucketwidth);
178   }
179   else{
180     numMets = 3;
181     numRes  = 4;
182     numBuckets  = 10;
183     bucketwidth  = 0.5;
184   }
185
186
187   fd = RPCprocessCreate(&pid, "localhost", "", argv[1],arg_list);
188   if (fd < 0) {
189     perror("process Create");
190     exit(-1);
191   }
192
193   
194   fprintf(stderr,"in client before new visualizationUser\n");
195   vup = new visualizationUser(fd,NULL,NULL);
196
197   done = 0;
198   while(!done){
199
200       // check for upcall
201       // these don't do anything yet 
202       if(RPC_readReady(fd))
203         vup->awaitResponce(-1);
204
205       wch = -1;
206       while((wch < 0) || (wch > 6)){
207         fprintf(stdout,"\n---------------------------------------------\n");
208         fprintf(stdout,"enter number of operation to perform:\n");
209         fprintf(stdout,"---------------------------------------------\n");
210         fprintf(stdout,"0:data values  1:fold    2:invalid m/r  3:add m/r\n");
211         fprintf(stdout,"4:new m/r      5:phase   6:quit\n");
212         fprintf(stdout,"---------------------------------------------\n\n");
213         scanf("%d",&wch);
214       }
215       switch(wch){
216         case 0:
217             fprintf(stdout,"enter number of buckets to send\n"); 
218             scanf("%d",&numtimes);
219             SendData(numtimes);
220
221             break;
222         case 1:
223             Fold();
224             break;
225         case 2:
226             InvalidMR();
227             break;
228         case 3:
229             AddMR(numMets,numRes);
230             break;
231         case 4:
232             NewMR(1,1);
233             break;
234         case 5:
235             Phase();
236             break;
237         case 6:
238             done = 1;
239             break;
240       }
241
242   }
243   for(i=0;i<2;i++)
244     free(arg_list[i]);
245   delete [] arg_list;
246   delete(vup);
247
248 }