ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/host/c++/Host.cpp
Revision: 1.2
Committed: Mon Mar 5 12:40:32 2001 UTC (23 years, 8 months ago) by ab11
Branch: MAIN
Changes since 1.1: +121 -34 lines
Log Message:
Added support for Heartbeats - still sending incorrect date and sequence due to l64a function doing something silly

File Contents

# User Rev Content
1 ab11 1.1 #include <iostream.h>
2     #include <unistd.h> // linux header for the sleep function
3 ab11 1.2 #include <stdlib.h> // itoa()
4 ab11 1.1 #include <time.h>
5     #include "SysMon.h"
6     // #include "Config.h" - redefinition error - turns out i don't need it
7     #ifndef XMLFORMATTER_H /* Has the file been INCLUDE'd already? */
8     #define XMLFORMATTER_H yes
9     #include "XMLFormatter.h"
10     #endif
11    
12     using std::string;
13    
14     int main(){
15    
16     // list of local variables
17     int noErrors = 1;
18 ab11 1.2 int reloadConfig = 0;
19 ab11 1.1
20     // print some extra info..
21     int debug = 0;
22    
23     // create a new connection with the Config Host
24     // values hard coded for the moment
25     std::cout << "C Host starting..\n";
26    
27     std::cout << "Attemping to load config\n";
28 ab11 1.2 Config config("raptor.ukc.ac.uk",4567,debug); // host, port, debug (0/1)
29 ab11 1.1
30     std::cout << "Creating data collector\n";
31     SysMon sysMon(config, debug);
32    
33     std::cout << "Configuring UDPUpdateTime\n";
34     int UDPUpdateTime = config.getIntProperty("UDPUpdateTime");
35     if ( UDPUpdateTime == -1 ){
36     if ( debug == 1 ){
37     std::cout << "Using Default time!\n";
38     UDPUpdateTime = 5;
39     } // if
40     } // if
41    
42 ab11 1.2
43 ab11 1.1 std::cout << "Configuring TCPUpdateTime\n";
44     int TCPUpdateTime = config.getIntProperty("TCPUpdateTime");
45     if ( TCPUpdateTime == -1){
46     if ( debug == 1 ){
47     std::cout << "Using Default time!\n";
48     TCPUpdateTime = 10;
49     } // if
50     } // if
51    
52     std::cout << "Configuring AveragerUpdateTime\n";
53     int AveragerUpdateTime = config.getIntProperty("AVERAGERUpdateTime");
54     if ( AveragerUpdateTime == -1){
55     if ( debug == 1 ){
56     std::cout << "Using Default time!\n";
57     } // if
58     AveragerUpdateTime = 2;
59     } // if
60    
61 ab11 1.2 std::cout << "Configuring Filter Retry Tolerances\n";
62     int MaxFilterRetrys = config.getIntProperty("MAXTCPFilterRetries");
63     if ( MaxFilterRetrys == -1){
64     if ( debug == 1 ){
65     std::cout << "Using Default Tolerance\n";
66     } // if
67     MaxFilterRetrys = 5;
68     } // if
69    
70    
71 ab11 1.1 std::cout << "Configuring Alerter\n";
72     // Set the values at which the Alerter should kick in. and how many packets it should
73     // send
74    
75     // now do the data collection
76    
77 ab11 1.2 std::cout << "Starting Data Collection\n";
78 ab11 1.1 // work out which is closer, the next heartbeat or the next data collection
79 ab11 1.2 long localTime = time(NULL);
80     // std::cout << "#";
81 ab11 1.1 int nextUDPTime = localTime + UDPUpdateTime;
82     int nextAveragerTime = localTime + AveragerUpdateTime;
83     int nextTCPTime = localTime + TCPUpdateTime;
84 ab11 1.2 long sequence = 0;
85    
86 ab11 1.1 int nextAction = 0;
87     while ( noErrors == 1){
88 ab11 1.2 // firstly check we haven't got to reload our config
89     if ( reloadConfig == 1 ){
90     // reload the config by starting a new
91     std::cout << "Forcing reload of Configuration\n";
92     config = Config("raptor.ukc.ac.uk",4567,debug);
93    
94     std::cout << "Configuring UDPUpdateTime\n";
95     int UDPUpdateTime = config.getIntProperty("UDPUpdateTime");
96     if ( UDPUpdateTime == -1 ){
97     if ( debug == 1 ){
98     std::cout << "Using Default time!\n";
99     UDPUpdateTime = 5;
100     } // if
101     } // if
102    
103    
104     std::cout << "Configuring TCPUpdateTime\n";
105     int TCPUpdateTime = config.getIntProperty("TCPUpdateTime");
106     if ( TCPUpdateTime == -1){
107     if ( debug == 1 ){
108     std::cout << "Using Default time!\n";
109     TCPUpdateTime = 10;
110     } // if
111     } // if
112    
113     std::cout << "Configuring AveragerUpdateTime\n";
114     int AveragerUpdateTime = config.getIntProperty("AVERAGERUpdateTime");
115     if ( AveragerUpdateTime == -1){
116     if ( debug == 1 ){
117     std::cout << "Using Default time!\n";
118     } // if
119     AveragerUpdateTime = 2;
120     } // if
121    
122     std::cout << "Configuring Filter Retry Tolerances\n";
123     int MaxFilterRetrys = config.getIntProperty("MAXTCPFilterRetries");
124     if ( MaxFilterRetrys == -1){
125     if ( debug == 1 ){
126     std::cout << "Using Default Tolerance\n";
127     } // if
128     MaxFilterRetrys = 5;
129     } // if
130    
131     } // if reloadconfig
132    
133    
134     localTime = time(NULL);
135     // std::cout << ".";
136 ab11 1.1 // keep going while no non-fatal errors have occurred
137     int waitTime = 0;
138    
139     if ( nextTCPTime <= nextAveragerTime ){
140 ab11 1.2 // std::cout << "-";
141 ab11 1.1 if ( nextTCPTime >= nextUDPTime ){
142 ab11 1.2 // std::cout << "}";
143 ab11 1.1 nextAction = 3;
144 ab11 1.2 waitTime = nextUDPTime - localTime;
145 ab11 1.1 } else {
146     // set the heartbeat to be the next item
147 ab11 1.2 // std::cout << "{";
148 ab11 1.1 nextAction = 1;
149 ab11 1.2 waitTime = nextTCPTime - localTime;
150 ab11 1.1 } // if
151     } else {
152 ab11 1.2 // std::cout << "+";
153 ab11 1.1 if ( nextAveragerTime >= nextUDPTime ){
154 ab11 1.2 // std::cout << "[";
155 ab11 1.1 nextAction = 3;
156 ab11 1.2 waitTime = nextUDPTime - localTime;
157 ab11 1.1 } else {
158     // set grabstats to be in the next action
159 ab11 1.2 // std::cout << "]";
160 ab11 1.1 nextAction = 2;
161 ab11 1.2 waitTime = nextAveragerTime - localTime;
162 ab11 1.1 } // if
163     } // if
164    
165     // sleep until this time only if it is greater than 1!
166     if ( waitTime >= 1 ){
167     // need to output \n to std::cout or the wait is infinate!!!! ?????
168 ab11 1.2 // will core dump if debug = 0
169 ab11 1.1 sleep(waitTime); /// crashes here
170 ab11 1.2
171 ab11 1.1 }
172    
173 ab11 1.2
174 ab11 1.1 localTime = time(NULL);
175 ab11 1.2 int con = -1;
176     int conCount = 0;
177    
178 ab11 1.1 // do the action
179     switch (nextAction){
180 ab11 1.2 case 1: std::cout << "Scheduled TCP Heartbeat Connection" << endl;
181 ab11 1.1 nextTCPTime = localTime + TCPUpdateTime;
182 ab11 1.2 // connect to the filter - should do all the talking within config.
183     con = (config.getSmallNet())->connectHeartBeat(config.getUDPFilterName(), config.getFilterPort());
184     conCount = 0;
185     while (( con != 0 ) && ( conCount < MaxFilterRetrys )){
186     int con = (config.getSmallNet())->connectHeartBeat(config.getUDPFilterName(), config.getFilterPort());
187     conCount++;
188     }
189     // if con != 0, then we must reconnect to the main filter manager and
190     // reload our config!
191     if ( con == 0 ){
192     // run the chat script
193     int result = config.chatHeartBeat();
194     if ( result != 0 ){
195     // gotta reload our config
196     reloadConfig = 1;
197     } // if
198     } else {
199     // set the config to be reloaded next time
200     reloadConfig = 1;
201     } // if con =!= 0
202    
203 ab11 1.1 break;
204 ab11 1.2 case 2: nextAveragerTime = localTime + AveragerUpdateTime;
205 ab11 1.1 if ( sysMon.collect() > 0 ){
206     // suggests that there should be an alert
207 ab11 1.2 std::cout << "Alert Status" << endl;
208 ab11 1.1 }
209     break;
210 ab11 1.2 default: std::cout << "Scheduled UDP Connection" << endl;
211 ab11 1.1 nextUDPTime = localTime + UDPUpdateTime;
212     // package up the system data
213 ab11 1.2 string host = (config.getSmallNet())->getHostName();
214     string ip = (config.getSmallNet())->getHostIP();
215    
216     char * buffer;
217     buffer = l64a( sequence );
218     char * seq = buffer;
219     buffer = l64a( localTime );
220     char * date = buffer;
221    
222    
223     string attributes = "type=\"data\" machine_name=\""+host+"\" ip=\""+ip+"\" date=\""+date+"\" seq_no=\""+seq+"\"";
224 ab11 1.1
225     XMLFormatter xml("packet",attributes);
226     // put in the data
227     xml.addString(sysMon.getData());
228     (config.getSmallNet())->sendUPDPacket(config.getUDPFilterName(), config.getUDPFilterPort(), xml.returnXML());
229    
230     break;
231     } // switch
232    
233     } // while
234    
235     std::cout << "A fatal error occurred which caused this program to quit\n";
236     std::cout << "It is suggested that all belly button lint should be removed\n";
237 ab11 1.2 std::cout << "prior to use of this program\n";
238     std::cout << "Oh and BTW, All you BASE are belong to us!\n";
239 ab11 1.1 std::cout << "Error Code: " << noErrors << "\n";
240    
241     return 0;
242    
243     } // main