Subversion Repositories f9daq

Rev

Rev 266 | Rev 319 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 266 Rev 267
1
<?php
1
<?php
2
 
2
 
3
ini_set('display_errors', 1);
3
ini_set('display_errors', 1);
4
ini_set('display_startup_errors', 1);
4
ini_set('display_startup_errors', 1);
5
error_reporting(E_ALL);
5
error_reporting(E_ALL);
6
 
6
 
7
require 'config.php';
7
require 'config.php';
8
require 'ip2coordinates.php';
8
require 'ip2coordinates.php';
9
 
9
 
10
header('Content-Type: text/event-stream');
10
header('Content-Type: text/event-stream');
11
// recommended to prevent caching of event data.
11
// recommended to prevent caching of event data.
12
header('Cache-Control: no-cache');
12
header('Cache-Control: no-cache');
13
 
13
 
14
 
14
 
15
function xmlWalker($xml_array, $parent) {
15
function xmlWalker($xml_array, $parent) {
16
         $cmd="";
16
         $cmd="";
17
         foreach($xml_array as $tag => $value) {
17
         foreach($xml_array as $tag => $value) {
18
            if ((int)$tag === $tag) {
18
            if ((int)$tag === $tag) {
19
                $tag = mb_substr($parent, 0, -1);
19
                $tag = mb_substr($parent, 0, -1);
20
            }
20
            }
21
            $cmd = $cmd . "<" .$tag. ">";
21
            $cmd = $cmd . "<" .$tag. ">";
22
            if (is_array($value)) {
22
            if (is_array($value)) {
23
                 $cmd = $cmd . xmlWalker($value, $tag);
23
                 $cmd = $cmd . xmlWalker($value, $tag);
24
            } else {
24
            } else {
25
                 $cmd = $cmd . $value;
25
                 $cmd = $cmd . $value;
26
            }
26
            }
27
            $cmd = $cmd . "</" .$tag. ">";
27
            $cmd = $cmd . "</" .$tag. ">";
28
        }
28
        }
29
        return $cmd;
29
        return $cmd;
30
    }
30
    }
31
 
31
 
32
 
32
 
33
 
33
 
34
 
34
 
35
function parseDOMNode(DOMNode $domNode) {
35
function parseDOMNode(DOMNode $domNode) {
36
    $str="";
36
    $str="";
37
    $cnt=0;
37
    $cnt=0;
38
    foreach ($domNode->childNodes as $node)
38
    foreach ($domNode->childNodes as $node)
39
    {  
39
    {  
40
        if ($cnt){
40
        if ($cnt){
41
          $str .= ",";
41
          $str .= ",";
42
        }
42
        }
43
        if($node->hasChildNodes()) {
43
        if($node->hasChildNodes()) {
44
           if (!$node->childNodes->item(0)->hasChildNodes() ||
44
           if (!$node->childNodes->item(0)->hasChildNodes() ||
45
               strpos($node->nodeName,"list")!==false       ||
45
               strpos($node->nodeName,"list")!==false       ||
46
               $node->nodeName === "histogram"              )  {
46
               $node->nodeName === "histogram"              )  {
47
             $str .= parseDOMNode($node);
47
             $str .= parseDOMNode($node);
48
           } else {
48
           } else {
49
             $str .=  $node->nodeName.'(' ;
49
             $str .=  $node->nodeName.'(' ;
50
             $str .= parseDOMNode($node);
50
             $str .= parseDOMNode($node);
51
             $str .=   ') '     ;
51
             $str .=   ') '     ;
52
           }
52
           }
53
 
53
 
54
        } else {
54
        } else {
55
 
55
 
56
          if (is_numeric($node->nodeValue) || $node->parentNode->nodeName === "pid") {
56
          if (is_numeric($node->nodeValue) || $node->parentNode->nodeName === "pid") {
57
            $str .=   $node->nodeValue ;
57
            $str .=   $node->nodeValue ;
58
          } else {
58
          } else {
59
            if (strlen($node->nodeValue)) {
59
            if (strlen($node->nodeValue)) {
60
              $str .=  '"' . $node->nodeValue . '"' ;
60
              $str .=  '"' . $node->nodeValue . '"' ;
61
            } else {
61
            } else {
62
              $str .=  "-1";
62
              $str .=  "-1";
63
            }
63
            }
64
          }
64
          }
65
        }
65
        }
66
        $cnt++;
66
        $cnt++;
67
    }    
67
    }    
68
    return $str;
68
    return $str;
69
}
69
}
70
 
70
 
71
 
71
 
72
 
72
 
73
 
73
 
74
 
74
 
75
 
75
 
76
function stat2db($info){
76
function stat2db($info){
77
global $code;
77
global $code;
78
// Establish a MySQL connection and select our database using values contained in config.php.
78
// Establish a MySQL connection and select our database using values contained in config.php.
79
 
79
 
80
if (PHP_SAPI === 'cli') {
80
if (PHP_SAPI === 'cli') {
81
    $ip = "171.173.43.71";
81
    $ip = "171.173.43.71";
82
} else {
82
} else {
83
  $ip = $_SERVER['REMOTE_ADDR'];
83
  $ip = $_SERVER['REMOTE_ADDR'];
84
}
84
}
85
 
85
 
86
$userinfo = IPtoCoordinates($ip);
86
$userinfo = IPtoCoordinates($ip);
87
 
87
 
88
 
88
 
89
mysql_connect(DB_HOST, DB_USER, DB_PASS);
89
mysql_connect(DB_HOST, DB_USER, DB_PASS);
90
mysql_select_db(DB_NAME);
90
mysql_select_db(DB_NAME);
91
 
91
 
92
 
92
 
93
$msql = 'INSERT INTO `visitor_map` (`ip`, `location`, `longitude`, `latitude`,`time`, `neve`, `realtime`, `cputime`,`code` ) VALUES ('
93
$msql = 'INSERT INTO `visitor_map` (`ip`, `location`, `longitude`, `latitude`,`time`, `neve`, `realtime`, `cputime`,`code` ) VALUES ('
94
. '\'' . mysql_real_escape_string($ip) . '\','
94
. '\'' . mysql_real_escape_string($ip) . '\','
95
. '\'' . $userinfo['location'] . '\', '
95
. '\'' . $userinfo['location'] . '\', '
96
. $userinfo['longitude'] . ', '
96
. $userinfo['longitude'] . ', '
97
. $userinfo['latitude'] . ' , '
97
. $userinfo['latitude'] . ' , '
98
. $info
98
. $info
99
. ', \'' . mysql_real_escape_string($code) . '\'' .
99
. ', \'' . mysql_real_escape_string($code) . '\'' .
100
 
100
 
101
')';
101
')';
102
 
102
 
103
    send_message(0,$msql,100);
103
    send_message(0,$msql,100);
104
 
104
 
105
 
105
 
106
// Assign the user's IP to a variable and plot it into our function, whose return value is assigned to $userinfo
106
// Assign the user's IP to a variable and plot it into our function, whose return value is assigned to $userinfo
107
// Remember, the user's IP is not to be trusted 100%
107
// Remember, the user's IP is not to be trusted 100%
108
 
108
 
109
// We select the location column from the database
109
// We select the location column from the database
110
$user = mysql_query('SELECT `location` FROM `visitor_map` WHERE `location` = \'' . $userinfo['location'] . '\'');
110
$user = mysql_query('SELECT `location` FROM `visitor_map` WHERE `location` = \'' . $userinfo['location'] . '\'');
111
// If it does NOT return a value, and the user's IP could indeed be matched...
111
// If it does NOT return a value, and the user's IP could indeed be matched...
112
// (This makes sure that we have no duplicate rows (which would be a waste) and can determine the visitor's location, respectively)
112
// (This makes sure that we have no duplicate rows (which would be a waste) and can determine the visitor's location, respectively)
113
// ...We insert the values returned by our function into the database, escaping any possible dangerous input
113
// ...We insert the values returned by our function into the database, escaping any possible dangerous input
114
if(!mysql_fetch_row($user) && $userinfo)
114
if(!mysql_fetch_row($user) && $userinfo)
115
  mysql_query($msql);
115
  mysql_query($msql);
116
// or die(mysql_error());
116
// or die(mysql_error());
117
 
117
 
118
}
118
}
119
 
119
 
120
 
120
 
121
 
121
 
122
function executeCmd($commandLine) {
122
function executeCmd($commandLine) {
123
 
123
 
124
  $pipe = popen("$commandLine" , 'r');
124
  $pipe = popen("$commandLine" , 'r');
125
 
125
 
126
  if (!$pipe) {
126
  if (!$pipe) {
127
    print "pipe failed.";
127
    print "pipe failed.";
128
    return "";
128
    return "";
129
  }
129
  }
130
  $output = '';
130
  $output = '';
131
  while(!feof($pipe)) {
131
  while(!feof($pipe)) {
132
    $contents = fread($pipe, 12);
132
    $contents = fread($pipe, 12);
133
    $unpacked = unpack("l*",$contents);
133
    $unpacked = unpack("l*",$contents);
134
    $id       =  $unpacked[1];
134
    $id       =  $unpacked[1];
135
    $len      =  $unpacked[2];
135
    $len      =  $unpacked[2];
136
    $progress =  $unpacked[3];
136
    $progress =  $unpacked[3];
137
    if ($len>0){
137
    if ($len>0){
138
      $out= fread($pipe, $len);
138
      $out= fread($pipe, $len);
139
      if ($id == 3){
139
      if ($id == 3){
140
       stat2db($out);
140
       stat2db($out);
141
//       $out = $_SERVER['REMOTE_ADDR'] . ";" .$out ;
141
//       $out = $_SERVER['REMOTE_ADDR'] . ";" .$out ;
142
//       $retval = system("echo '$out' >> public/blab2stat.txt ");
142
//       $retval = system("echo '$out' >> public/blab2stat.txt ");
143
//       $out .= ";" . $retval;
143
//       $out .= ";" . $retval;
144
       $id = 0 ;
144
       $id = 0 ;
145
      }
145
      }
146
      send_message($id,$out,$progress);
146
      send_message($id,$out,$progress);
147
    }
147
    }
148
    $output .=$out;
148
    $output .=$out;
149
  }
149
  }
150
  pclose($pipe);
150
  pclose($pipe);
151
  return $output;
151
  return $output;
152
}
152
}
153
 
153
 
154
function send_message($id, $message, $progress) {
154
function send_message($id, $message, $progress) {
155
    $d = array('message' => $message , 'progress' => $progress); //prepare json
155
    $d = array('message' => $message , 'progress' => $progress); //prepare json
156
 
156
 
157
    echo "id: $id" . PHP_EOL;
157
    echo "id: $id" . PHP_EOL;
158
    echo "data: " . json_encode($d) . PHP_EOL;
158
    echo "data: " . json_encode($d) . PHP_EOL;
159
 
159
 
160
   if (PHP_SAPI !== 'cli') {
160
   if (PHP_SAPI !== 'cli') {
161
     echo PHP_EOL;
161
     echo PHP_EOL;
162
     ob_flush();
162
     ob_flush();
163
   }
163
   }
164
   flush();
164
   flush();
165
}
165
}
166
 
166
 
167
 
167
 
168
 
168
 
169
$code="";
169
$code="";
170
if (PHP_SAPI === 'cli') {
170
if (PHP_SAPI === 'cli') {
171
  $code = $argv[1];
171
  $code = $argv[1];
172
} else {
172
} else {
173
  if (isset($_GET["code"])){
173
  if (isset($_GET["code"])){
174
   $code =  $_GET["code"];
174
   $code =  $_GET["code"];
175
  }
175
  }
176
}
176
}
177
 
177
 
178
$data = json_decode($code, true);
178
$data = json_decode($code, true);
179
 
179
 
180
$neve  = $data['analysis']['neve'];
180
$neve  = $data['analysis']['neve'];
-
 
181
$first = $data['analysis']['first'];
-
 
182
$evprint = $data['analysis']['print'];
181
$source= $data['analysis']['datasource'];
183
$source= $data['analysis']['datasource'];
182
 
184
 
183
$xml = '<?xml version="1.0" encoding="utf-8"?>' .  xmlWalker($data,'start');
185
$xml = '<?xml version="1.0" encoding="utf-8"?>' .  xmlWalker($data,'start');
184
$dom = new DOMDocument;
186
$dom = new DOMDocument;
185
$dom->loadXML($xml);
187
$dom->loadXML($xml);
186
 
188
 
187
 
189
 
188
echo "<pre>";
190
echo "<pre>";
189
echo $dom->saveXML();
191
echo $dom->saveXML();
190
echo "</pre>";
192
echo "</pre>";
191
echo PHP_EOL;
193
echo PHP_EOL;
192
 
194
 
193
$cnt=0;
195
$cnt=0;
194
 
196
 
195
$fstart = $dom->createElement("init");
197
$fstart = $dom->createElement("init");
196
$dom->appendChild($fstart);
198
$dom->appendChild($fstart);
197
 
199
 
198
$el = $dom->getElementsByTagName('neve')->item(0);
200
$el = $dom->getElementsByTagName('neve')->item(0);
-
 
201
$fstart->appendChild($el);
-
 
202
$el = $dom->getElementsByTagName('first')->item(0);
-
 
203
$fstart->appendChild($el);
-
 
204
$el = $dom->getElementsByTagName('print')->item(0);
199
$fstart->appendChild($el);
205
$fstart->appendChild($el);
200
$el = $dom->getElementsByTagName('datasource')->item(0);
206
$el = $dom->getElementsByTagName('datasource')->item(0);
201
$fstart->appendChild($el);
207
$fstart->appendChild($el);
202
 
208
 
203
$histogramCount = $dom->getElementsByTagName('h1d')->length;
209
$histogramCount = $dom->getElementsByTagName('h1d')->length;
204
for($i= $histogramCount-1;$i>=0;--$i)
210
for($i= $histogramCount-1;$i>=0;--$i)
205
{  
211
{  
206
   $idnode=$dom->createElement("id","$i");
212
   $idnode=$dom->createElement("id","$i");
207
   
213
   
208
   $histo=$dom->getElementsByTagName('h1d')->item($i);
214
   $histo=$dom->getElementsByTagName('h1d')->item($i);
209
   $histo->appendChild($idnode);
215
   $histo->appendChild($idnode);
210
 
216
 
211
   $newnode=$dom->createTextNode("$i");
217
   $newnode=$dom->createTextNode("$i");
212
   $parent = $histo->parentNode;
218
   $parent = $histo->parentNode;
213
   //$histo->setAttribute('id',"$i");
219
   //$histo->setAttribute('id',"$i");
214
   $fstart->appendChild($histo);  
220
   $fstart->appendChild($histo);  
215
   $parent->appendChild($newnode);
221
   $parent->appendChild($newnode);
216
   
222
   
217
}
223
}
218
 
224
 
219
 
225
 
220
$xpath = new DOMXpath($dom);
226
$xpath = new DOMXpath($dom);
221
$nodelist = $xpath->query('//selector|//combiner');
227
$nodelist = $xpath->query('//selector|//combiner');
222
$cnt=1;
228
$cnt=1;
223
foreach ($nodelist as $plist) {
229
foreach ($nodelist as $plist) {
224
    $newnode=$dom->createElement("plist","$cnt");
230
    $newnode=$dom->createElement("plist","$cnt");
225
    $fstart->appendChild($newnode);
231
    $fstart->appendChild($newnode);
226
    $newnode=$dom->createElement("id","$cnt");
232
    $newnode=$dom->createElement("id","$cnt");
227
    $plist->appendChild($newnode);
233
    $plist->appendChild($newnode);
228
    $cnt++;
234
    $cnt++;
229
}
235
}
230
 
236
 
231
$nodelist = $xpath->query('//list|//list1|//list2');
237
$nodelist = $xpath->query('//list|//list1|//list2');
232
$cnt=1;
238
$cnt=1;
233
foreach ($nodelist as $plist) {
239
foreach ($nodelist as $plist) {
234
  if( $plist->childNodes->length === 0){
240
  if( $plist->childNodes->length === 0){
235
    $newnode=$dom->createTextNode("-1");
241
    $newnode=$dom->createTextNode("-1");
236
    $plist->appendChild($newnode);
242
    $plist->appendChild($newnode);
237
  }
243
  }
238
}
244
}
239
//$isEmpty = $elem->childNodes->length === 0;
245
//$isEmpty = $elem->childNodes->length === 0;
240
 
246
 
241
echo "<pre>";
247
echo "<pre>";
242
echo $dom->saveXML();
248
echo $dom->saveXML();
243
echo "</pre>";
249
echo "</pre>";
244
 
250
 
245
echo PHP_EOL;
251
echo PHP_EOL;
246
 
252
 
247
$str="";
253
$str="";
248
foreach ($dom->getElementsByTagName('analysis') as $node){
254
foreach ($dom->getElementsByTagName('analysis') as $node){
249
  $str = PHP_EOL . "void Blab2::event(){" . PHP_EOL ;
255
  $str = PHP_EOL . "void Blab2::event(){" . PHP_EOL ;
250
  $str .= parseDOMNode($node) . ";";
256
  $str .= parseDOMNode($node) . ";";
251
  $str .= PHP_EOL . "}" . PHP_EOL ;
257
  $str .= PHP_EOL . "}" . PHP_EOL ;
252
}
258
}
253
 
259
 
254
 
260
 
255
$nodelist = $fstart->getElementsByTagName('h1d');
261
$nodelist = $fstart->getElementsByTagName('h1d');
256
$init = PHP_EOL . "void Blab2::Init(){" . PHP_EOL ;
262
$init = PHP_EOL . "void Blab2::Init(){" . PHP_EOL ;
257
$init .="fNeve=$neve;" . PHP_EOL ;
263
$init .="fNeve=$neve;" . PHP_EOL ;
-
 
264
$init .="fNfirst=$first;" . PHP_EOL ;
258
$init .="fData=$source;" . PHP_EOL ;
265
$init .="fData=$source;" . PHP_EOL ;
-
 
266
$init .="fPrint=$evprint;" . PHP_EOL ;
259
foreach ($nodelist as $node) {
267
foreach ($nodelist as $node) {
260
    $init .= $node->nodeName . "(";
268
    $init .= $node->nodeName . "(";
261
    $cnt=0;
269
    $cnt=0;
262
    foreach ($node->childNodes as $el) {
270
    foreach ($node->childNodes as $el) {
263
      if  ($cnt) {
271
      if  ($cnt) {
264
          $init .= ",";
272
          $init .= ",";
265
      }
273
      }
266
      if (is_numeric($el->nodeValue)) {
274
      if (is_numeric($el->nodeValue)) {
267
          $init .=  $el->nodeValue ;
275
          $init .=  $el->nodeValue ;
268
      } else {      
276
      } else {      
269
          $init .= '"' . $el->nodeValue . '"' ;
277
          $init .= '"' . $el->nodeValue . '"' ;
270
      }
278
      }
271
      $cnt++;
279
      $cnt++;
272
    }
280
    }
273
    $init .= ");" . PHP_EOL;
281
    $init .= ");" . PHP_EOL;
274
}
282
}
275
 
283
 
276
foreach ($fstart->getElementsByTagName('plist')  as $node) {
284
foreach ($fstart->getElementsByTagName('plist')  as $node) {
277
    $init .= $node->nodeName . "(" .$node->nodeValue .  ");" . PHP_EOL;
285
    $init .= $node->nodeName . "(" .$node->nodeValue .  ");" . PHP_EOL;
278
}
286
}
279
$init .= PHP_EOL . "}" . PHP_EOL ;
287
$init .= PHP_EOL . "}" . PHP_EOL ;
280
 
288
 
281
 
289
 
282
$cmd0  = ".L BParticle.cc+". PHP_EOL;
290
$cmd0  = ".L BParticle.cc+". PHP_EOL;
283
$cmd0 .= ".L BEvent.cc+". PHP_EOL;
291
$cmd0 .= ".L BEvent.cc+". PHP_EOL;
284
$cmd0 .= ".L Blab2.cc". PHP_EOL;
292
$cmd0 .= ".L Blab2.cc". PHP_EOL;
285
$cmd0 .= $str. PHP_EOL;
293
$cmd0 .= $str. PHP_EOL;
286
$cmd0 .= $init. PHP_EOL;
294
$cmd0 .= $init. PHP_EOL;
287
$cmd0 .= "Blab2 *blab2 = new Blab2();". PHP_EOL;
295
$cmd0 .= "Blab2 *blab2 = new Blab2();". PHP_EOL;
288
 
296
 
289
//LONG RUNNING TASK
297
//LONG RUNNING TASK
290
 //executeCmd(5, 'ls');
298
 //executeCmd(5, 'ls');
291
 //executeCmd(5, "/home/rok/public_html/blab/blockly/app/runscript.sh");
299
 //executeCmd(5, "/home/rok/public_html/blab/blockly/app/runscript.sh");
292
 //executeCmd(5, 'for ((i=0;i<5;i++)) ; do  echo $i; sleep 1; done;');
300
 //executeCmd(5, 'for ((i=0;i<5;i++)) ; do  echo $i; sleep 1; done;');
293
if (file_exists('/opt/root/bin/thisroot.sh')){
301
if (file_exists('/opt/root/bin/thisroot.sh')){
294
  $profile ='/opt/root/bin/thisroot.sh';
302
  $profile ='/opt/root/bin/thisroot.sh';
295
} else {
303
} else {
296
  $profile ='/home/rok/root/bin/thisroot.sh';
304
  $profile ='/home/rok/root/bin/thisroot.sh';
297
}
305
}
298
$cmd ="bash -c 'source $profile ;cd src; root -b -l <<EOL" . PHP_EOL;
306
$cmd ="bash -c 'source $profile ;cd src; root -b -l <<EOL" . PHP_EOL;
299
$cmd .= $cmd0. PHP_EOL;
307
$cmd .= $cmd0. PHP_EOL;
300
$cmd .= "EOL'". PHP_EOL;
308
$cmd .= "EOL'". PHP_EOL;
301
 
309
 
302
send_message(0,$cmd0,0);
310
send_message(0,$cmd0,0);
303
executeCmd($cmd);
311
executeCmd($cmd);
304
send_message('CLOSE', $data,100);
312
send_message('CLOSE', $data,100);
305
?>
313
?>
306
 
314