ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/host/c++/Host.cpp
(Generate patch)

Comparing projects/cms/source/host/c++/Host.cpp (file contents):
Revision 1.1 by ab11, Mon Feb 26 14:59:04 2001 UTC vs.
Revision 1.7 by tdb, Tue May 21 16:47:11 2002 UTC

# Line 1 | Line 1
1 + /*
2 + * i-scream central monitoring system
3 + * http://www.i-scream.org.uk
4 + * Copyright (C) 2000-2002 i-scream
5 + *
6 + * This program is free software; you can redistribute it and/or
7 + * modify it under the terms of the GNU General Public License
8 + * as published by the Free Software Foundation; either version 2
9 + * of the License, or (at your option) any later version.
10 + *
11 + * This program is distributed in the hope that it will be useful,
12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 + * GNU General Public License for more details.
15 + *
16 + * You should have received a copy of the GNU General Public License
17 + * along with this program; if not, write to the Free Software
18 + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19 + */
20 +
21   #include <iostream.h>
22   #include <unistd.h> // linux header for the sleep function
23 + #include <stdlib.h> // itoa()
24   #include <time.h>
25   #include "SysMon.h"
26   // #include "Config.h" - redefinition error - turns out i don't need it
# Line 14 | Line 35 | int main(){
35          
36          // list of local variables
37          int noErrors = 1;
38 +        int reloadConfig = 0;
39          
40          // print some extra info..
41          int debug = 0;
# Line 23 | Line 45 | int main(){
45          std::cout << "C Host starting..\n";
46          
47          std::cout << "Attemping to load config\n";
48 <        Config config("killigrew.ukc.ac.uk",4567,debug);                // host, port, debug (0/1)
48 >        Config config("raptor.ukc.ac.uk",4567,debug);           // host, port, debug (0/1)
49          
50          std::cout << "Creating data collector\n";
51          SysMon sysMon(config, debug);
# Line 37 | Line 59 | int main(){
59                  } // if
60          } // if
61                          
62 +                        
63          std::cout << "Configuring TCPUpdateTime\n";
64          int TCPUpdateTime = config.getIntProperty("TCPUpdateTime");
65          if ( TCPUpdateTime  == -1){
# Line 55 | Line 78 | int main(){
78                  AveragerUpdateTime = 2;
79          } // if
80          
81 <        std::cout << "Configuring Alerter\n";
81 >        std::cout << "Configuring Filter Retry Tolerances\n";
82 >        int MaxFilterRetrys = config.getIntProperty("MAXTCPFilterRetries");
83 >        if ( MaxFilterRetrys == -1){
84 >                if ( debug == 1 ){
85 >                        std::cout << "Using Default Tolerance\n";
86 >                } // if
87 >                MaxFilterRetrys = 1;
88 >        } // if
89 >        
90 >        
91 >        // std::cout << "Configuring Alerter\n";
92          // Set the values at which the Alerter should kick in. and how many packets it should
93          // send
94          
95          // now do the data collection
96          
97 +        std::cout << "Starting Data Collection\n";
98          // work out which is closer, the next heartbeat or the next data collection
99          int localTime = time(NULL);
100 <        std::cout << "#";
100 >        // std::cout << "#";
101          int nextUDPTime = localTime + UDPUpdateTime;
102          int nextAveragerTime = localTime + AveragerUpdateTime;
103          int nextTCPTime = localTime + TCPUpdateTime;
104          int sequence = 0;
105 <        
105 >                
106          int nextAction = 0;
107          while ( noErrors == 1){
108 <                std::cout << ".";
108 >                // firstly check we haven't got to reload our config
109 >                if ( reloadConfig == 1 ){
110 >                        // reload the config by starting a new
111 >                        std::cout << "Forcing reload of Configuration\n";
112 >                        config = Config("raptor.ukc.ac.uk",4567,debug);
113 >                        
114 >                        std::cout << "Configuring UDPUpdateTime\n";
115 >                        int UDPUpdateTime = config.getIntProperty("UDPUpdateTime");
116 >                        if (  UDPUpdateTime == -1 ){
117 >                                if ( debug == 1 ){
118 >                                        std::cout << "Using Default time!\n";
119 >                                        UDPUpdateTime = 5;
120 >                                } // if
121 >                        } // if
122 >                                        
123 >                                        
124 >                        std::cout << "Configuring TCPUpdateTime\n";
125 >                        int TCPUpdateTime = config.getIntProperty("TCPUpdateTime");
126 >                        if ( TCPUpdateTime  == -1){
127 >                                if ( debug == 1 ){
128 >                                        std::cout << "Using Default time!\n";
129 >                                        TCPUpdateTime = 10;
130 >                                } // if
131 >                        } // if
132 >                        
133 >                        std::cout << "Configuring AveragerUpdateTime\n";
134 >                        int AveragerUpdateTime = config.getIntProperty("AVERAGERUpdateTime");
135 >                        if ( AveragerUpdateTime == -1){
136 >                                if ( debug == 1 ){
137 >                                        std::cout << "Using Default time!\n";
138 >                                } // if
139 >                                AveragerUpdateTime = 2;
140 >                        } // if
141 >                        
142 >                        std::cout << "Configuring Filter Retry Tolerances\n";
143 >                        int MaxFilterRetrys = config.getIntProperty("MAXTCPFilterRetries");
144 >                        if ( MaxFilterRetrys == -1){
145 >                                if ( debug == 1 ){
146 >                                        std::cout << "Using Default Tolerance\n";
147 >                                } // if
148 >                                MaxFilterRetrys = 5;
149 >                        } // if
150 >                        // reloadConfig is done now
151 >                        reloadConfig = 0;
152 >                } // if reloadconfig
153 >                
154 >                
155 >                
156 >                localTime = time(NULL);
157                  // keep going while no non-fatal errors have occurred
158                  int waitTime = 0;
159                  
160                  if ( nextTCPTime  <= nextAveragerTime ){
79                        std::cout << "-";
161                          if ( nextTCPTime >= nextUDPTime ){
81                                std::cout << "}";
162                                  nextAction = 3;
163 <                                waitTime = nextUDPTime - time(NULL);
163 >                                waitTime = nextUDPTime - localTime;
164                          } else {
165                                  // set the heartbeat to be the next item
86                                std::cout << "{";
166                                  nextAction = 1;
167 <                                waitTime = nextTCPTime - time(NULL);
167 >                                waitTime = nextTCPTime - localTime;
168                          } // if
169                  } else {
91                        std::cout << "+";
170                          if ( nextAveragerTime >=  nextUDPTime ){
93                                std::cout << "[";
171                                  nextAction = 3;
172 <                                waitTime = nextUDPTime - time(NULL);
172 >                                waitTime = nextUDPTime - localTime;
173                          } else {
174                                  // set grabstats to be in the next action
98                                std::cout << "]";
175                                  nextAction = 2;
176 <                                waitTime = nextAveragerTime - time(NULL);
176 >                                waitTime = nextAveragerTime - localTime;
177                          } // if
178                  } // if
179                  
180                  // sleep until this time only if it is greater than 1!
181                  if ( waitTime >= 1 ){
182 <                        // need to output \n to std::cout or the wait is infinate!!!! ?????
183 <                        std::cout << "_\n";
108 <                        sleep(waitTime); /// crashes here
109 <                        std::cout << "_";
182 >                        sleep(waitTime);
183 >                        
184                  }
185                  
186 <                std::cout << "~";
186 >                
187                  localTime = time(NULL);
188 +                int con = -1;
189 +                int conCount = 0;
190 +                
191                  // do the action
192                  switch (nextAction){
193 <                        case 1: std::cout << "T";
193 >                        case 1: std::cout << "Scheduled TCP Heartbeat Connection" << endl;
194                                  nextTCPTime = localTime + TCPUpdateTime;
195 <                                // SmallNet * net = config.getSmallNet();
196 <                                // net->connectHeartBeat(config.getFilterName(),config.getFilterPort());
195 >                                // connect to the filter - should do all the talking within config.
196 >                                con = (config.getSmallNet())->connectHeartBeat(config.getUDPFilterName(), config.getFilterPort());                            
197 >                                conCount = 0;
198 >                                while (( con != 0 ) && ( conCount < MaxFilterRetrys )){
199 >                                        int con = (config.getSmallNet())->connectHeartBeat(config.getUDPFilterName(), config.getFilterPort());                          
200 >                                        conCount++;
201 >                                }
202 >                                // if con != 0, then we must reconnect to the main filter manager and
203 >                                // reload our config!
204 >                                if ( con == 0 ){
205 >                                        // run the chat script
206 >                                        int result = config.chatHeartBeat();
207 >                                        if ( result != 0 ){
208 >                                                // gotta reload our config
209 >                                                reloadConfig = 1;
210 >                                        } // if
211 >                                } else {
212 >                                        // set the config to be reloaded next time
213 >                                        reloadConfig = 1;
214 >                                } // if con =!= 0
215 >                                
216                                  break;
217 <                        case 2: std::cout << "A";  
218 <                                nextAveragerTime = localTime + AveragerUpdateTime;
217 >                        case 2: nextAveragerTime = localTime + AveragerUpdateTime;
218 >                                /*
219                                  if ( sysMon.collect() > 0 ){
220                                          // suggests that there should be an alert
221 <                                        
222 <                                }
221 >                                        std::cout << "Alert Status" << endl;                                    
222 >                                    }*/
223                                  break;
224 <                        default: std::cout << "U";
224 >                        default: std::cout << "Scheduled UDP Connection" << endl;
225 >                             sysMon.collect();
226                                   nextUDPTime = localTime + UDPUpdateTime;
227                                   // package up the system data
228 <                                 /// lovely HARD CODING!!!!
229 <                                 string h1 = "raptor.ukc.ac.uk";
230 <                                 string ip1 = "129.12.4.232";
231 <                                 string date1 = "00000001";
232 <                                 string seq = "-64773929";
233 <                                                                
234 <                                 string attributes = "type=\"data\" machine_name=\""+h1+"\" ip=\""+ip1+"\" date=\""+date1+"\" seq_no=\""+seq+"\"";
228 >                                 string host = config.getFQDN();
229 >                                 // string ip = (config.getSmallNet())->getHostIP();
230 >                                
231 >                                 string seq = "";
232 >                                 // char * buffer;
233 >                                 char buffer[32];
234 >                                 sprintf(buffer,"%u", sequence);
235 >                                 seq = buffer;
236 >                                 string date = "";
237 >                                 sprintf(buffer,"%u", localTime);
238 >                                 date = buffer;
239 >                         string attributes = "type=\"data\" machine_name=\""+host+"\" ip=\"0.0.0.0\" date=\""+date+"\" seq_no=\""+seq+"\"";
240  
241                                   XMLFormatter xml("packet",attributes);
242                                   // put in the data
243                                   xml.addString(sysMon.getData());
244                                   (config.getSmallNet())->sendUPDPacket(config.getUDPFilterName(), config.getUDPFilterPort(), xml.returnXML());
245 <                                
245 >                                 // now clear the averaged data
246 >                                 sysMon.clearData();
247 >                                 sequence++;
248                                   break;
249                  } // switch
250                  
# Line 148 | Line 252 | int main(){
252          
253          std::cout << "A fatal error occurred which caused this program to quit\n";
254          std::cout << "It is suggested that all belly button lint should be removed\n";
255 <        std::cout << "prior to use of this program";
255 >        std::cout << "prior to use of this program\n";
256 >        std::cout << "Oh and BTW, All you BASE are belong to us!\n";
257          std::cout << "Error Code: " << noErrors << "\n";
258          
259          return 0;
260          
261 < } // main
261 > } // main

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines