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