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