source: trunk/update_notice.php @ 37

Last change on this file since 37 was 37, checked in by gegorbet, 5 years ago

gridctl mods for mysqli and aucsolutions, plus new text for crontabs and cronic

  • Property svn:keywords set to LastChangedDate Author
File size: 5.5 KB
Line 
1<?php
2
3$us3bin = exec( "ls -d ~us3/lims/bin" );
4$us3etc = exec( "ls -d ~us3/lims/etc" );
5include_once "$us3bin/listen-config.php";
6
7// Get the US3 system release of latest file on download site
8//$s_cmd1 = "ssh us3@ultrascan.uthscsa.edu 'ls -t /srv/www/htdocs/ultrascan3/software/us3*";
9//$s_cmd1 = "$s_cmd1 | sed -n 1p | cut -d\- -f3" . "'";
10$s_cmd1 = 'ls -t /srv/www/htdocs/uscn/ultrascan3/software/us3*';
11$s_cmd1 = "$s_cmd1 | sed -n 1p | cut -d\- -f3";
12$s_cmd2 = exec( $s_cmd1 );
13$sysrev = $s_cmd2;
14  echo "s_cmd1=$s_cmd1\n";
15  echo "sysrev=$sysrev\n";
16
17// Global variables
18$notice_db  = "us3_notice";
19$dbhost     = "localhost";
20$dbuser     = "us3_notice";
21$dbpassw    = "us3_notice";
22
23// Produce some output temporarily, so cron will send me message
24$now = time();
25echo "Time started: " . date( 'Y-m-d H:i:s', $now ) . "\n";
26
27// Read and parse the local notice file
28
29$n_fname  = "$us3etc/us3-notice.xml";
30$fh       = fopen( $n_fname, "r" );
31$xml      = fread( $fh, filesize( $n_fname ) );
32
33$parser = new XMLReader();
34$parser->xml( $xml );
35
36$notices  = array();
37$keys     = array();
38
39echo "=====START of PARSE LOOP===== \n";
40while( $parser->read() )
41{
42   $n_type = $parser->nodeType;
43//echo "n_type=$n_type \n";
44     
45   if ( $n_type == XMLReader::ELEMENT )
46   {
47      $name = $parser->name;
48//echo "name=$name \n";
49
50      if ( $name == "notice" )
51      {
52         $type   = $parser->getAttribute( "type" );
53//echo " type=$type \n";
54         $parser->moveToAttribute( "revision" );
55         $rev    = $parser->value;
56//echo " rev=$rev \n";
57         if ( $rev == "latest" )
58            $rev    = $sysrev;
59//echo " rev=$rev \n";
60
61         $key    = $type . $rev;
62         $notices[ $key ] = array();
63//echo "  key=$key \n";
64      }
65   }
66     
67   else if ( $n_type == XMLReader::TEXT )
68   {
69      $msg      = $parser->readString();
70//echo " msg=+++$msg+++ \n";
71      $len      = strlen( $msg );
72
73      if ( $len > 0 )
74      {  // Only add if not an empty message
75         $msg      = preg_replace( "/\@revision/", $rev, $msg );
76         $msg      = preg_replace( "/'/", "\\'", $msg );
77         $notices[ $key ][ 'type' ] = $type;
78         $notices[ $key ][ 'rev'  ] = $rev;
79         $notices[ $key ][ 'msg'  ] = $msg;
80         $notices[ $key ][ 'act'  ] = 'add';
81         $notices[ $key ][ 'id'   ] = '0';
82
83         $keys[]  = $key;
84      }
85   }
86}
87
88$parser->close();
89echo "=====END of PARSE LOOP===== \n";
90
91// Get data from notice DB. Update the action field to
92//  reflect which action is required on each entry:
93//   "add"  - is only present in file (add to DB);
94//   "del"  - is only present in DB (delete from DB);
95//   "upd"  - present in both, but messages differ (update in DB);
96//   "none" - present in both and messages identical (no DB update).
97
98$noteLink = mysqli_connect( $dbhost, $dbuser, $dbpassw, $notice_db );
99
100if ( ! $noteLink )
101{
102   echo "Could not connect to DB $notice_db - " . mysqli_error($noteLink) . "\n";
103   exit();
104}
105   
106$query = "SELECT id, type, revision, message FROM notice";
107
108$result = mysqli_query( $noteLink, $query )
109   or die( "Query failed : $query<br />" . mysqli_error($noteLink) );
110
111echo "=====START of DB QUERY LOOP===== \n";
112$num_rows = mysqli_num_rows( $result );
113
114echo "   numrows = $num_rows \n";
115while ( list( $id, $type, $rev, $msg ) = mysqli_fetch_array( $result ) )
116{
117   $key    = $type . $rev;
118
119   if ( in_array( $key, $keys ) )
120   {  // Entry is in both file and DB
121      $msgf   = $notices[ $key ][ 'msg'  ];
122      $notices[ $key ][ 'id'   ] = $id;
123      $notices[ $key ][ 'type' ] = $type;
124      $notices[ $key ][ 'rev'  ] = $rev;
125
126      if ( strcmp( $msg, $msgf ) == 0 )
127      {  // Messages match, so no update is needed
128         $notices[ $key ][ 'act'  ] = 'none';
129      }
130      else
131      {  // Messages differ, so DB entry must be updated
132         $notices[ $key ][ 'act'  ] = 'upd';
133         $notices[ $key ][ 'msg'  ] = $msgf;
134echo "   msg  = ++$msg++\n";
135echo "   msgf = ++$msgf++\n";
136      }
137   }
138
139   else
140   {  // Entry is only in DB, so a delete is needed
141      $notices[ $key ] = array();
142      $notices[ $key ][ 'id'   ] = $id;
143      $notices[ $key ][ 'type' ] = $type;
144      $notices[ $key ][ 'rev'  ] = $rev;
145      $notices[ $key ][ 'act'  ] = 'del';
146      $notices[ $key ][ 'msg'  ] = $msg;
147      $keys[]  = $key;
148   }
149}
150echo "=====END of DB QUERY LOOP===== \n";
151
152echo "=====START of DB Update LOOP===== \n";
153foreach ( $keys as $key )
154{
155   $type  = $notices[ $key ][ 'type' ];
156   $rev   = $notices[ $key ][ 'rev'  ];
157   $act   = $notices[ $key ][ 'act'  ];
158   $id    = $notices[ $key ][ 'id'   ];
159   $msg   = $notices[ $key ][ 'msg'  ];
160   $len   = strlen( $msg );
161   echo "-- key=$key --\n";
162   echo "    type:  $type \n";
163   echo "    rev:   $rev  \n";
164   echo "    act:   $act  \n";
165   echo "    id:    $id   \n";
166//   echo "    msg:   $msg  \n";
167   echo "    msg:   ( $len characters ) \n";
168
169   if ( $act == "add" )
170   {  // Must add the entry to the database
171      $query = "INSERT INTO notice " .
172               "SET type='$type', revision='$rev', message='$msg'";
173   }
174   else if ( $act == "del" )
175   {  // Must delete the entry from the database
176      $query = "DELETE FROM notice WHERE id='$id'";
177   }
178   else if ( $act == "upd" )
179   {  // Must update an existing entry in the database
180      $query = "UPDATE notice " .
181               "SET message='$msg' " .
182               "WHERE id='$id'";
183   }
184   echo "      query: [ $query ]  \n";
185
186   $result = mysqli_query( $noteLink, $query )
187      or die( "Query failed : $query<br />" . mysqli_error($noteLink) );
188
189}
190echo "=====END of DB Update LOOP===== \n";
191
192?>
Note: See TracBrowser for help on using the repository browser.