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