1 | 13 | simandl | <?php |
2 | 1 | simandl | // common code used by the poller, the manual-run from the Cacti UI, and from the command-line manual-run. |
3 | | | // this is the easiest way to keep it all consistent! |
4 | | | |
5 | 13 | simandl | function weathermap_memory_check($note="MEM") |
6 | | | { |
7 | | | if(function_exists("memory_get_usage")) |
8 | | | { |
9 | | | $mem_used = nice_bandwidth(memory_get_usage()); |
10 | | | $mem_allowed = ini_get("memory_limit"); |
11 | | | debug("$note: memory_get_usage() says ".$mem_used."Bytes used. Limit is ".$mem_allowed."\n"); |
12 | | | } |
13 | | | } |
14 | | | |
15 | 1 | simandl | function weathermap_run_maps($mydir) { |
16 | | | global $config; |
17 | | | global $weathermap_debugging, $WEATHERMAP_VERSION; |
18 | | | |
19 | | | include_once($mydir.DIRECTORY_SEPARATOR."HTML_ImageMap.class.php"); |
20 | | | include_once($mydir.DIRECTORY_SEPARATOR."Weathermap.class.php"); |
21 | | | |
22 | | | $outdir = $mydir.DIRECTORY_SEPARATOR.'output'; |
23 | | | $confdir = $mydir.DIRECTORY_SEPARATOR.'configs'; |
24 | | | |
25 | | | $mapcount = 0; |
26 | | | |
27 | | | // take our debugging cue from the poller - turn on Poller debugging to get weathermap debugging |
28 | | | if (read_config_option("log_verbosity") >= POLLER_VERBOSITY_DEBUG) |
29 | | | { |
30 | | | $weathermap_debugging = TRUE; |
31 | | | $mode_message = "DEBUG mode is on"; |
32 | | | } |
33 | | | else |
34 | | | { |
35 | | | $mode_message = "Normal logging mode. Turn on DEBUG in Cacti for more information"; |
36 | | | } |
37 | | | $quietlogging = read_config_option("weathermap_quiet_logging"); |
38 | | | // moved this outside the module_checks, so there should always be something in the logs! |
39 | | | if($quietlogging==0) cacti_log("Weathermap $WEATHERMAP_VERSION starting - $mode_message",true,"WEATHERMAP"); |
40 | | | |
41 | | | if(module_checks()) |
42 | | | { |
43 | 13 | simandl | weathermap_memory_check("MEM Initial"); |
44 | 1 | simandl | // move to the weathermap folder so all those relatives paths don't *have* to be absolute |
45 | | | $orig_cwd = getcwd(); |
46 | | | chdir($mydir); |
47 | | | |
48 | | | // first, see if the output directory even exists |
49 | | | if(is_dir($outdir)) |
50 | | | { |
51 | | | // next, make sure that we stand a chance of writing files |
52 | | | //// $testfile = realpath($outdir."weathermap.permissions.test"); |
53 | | | $testfile = $outdir.DIRECTORY_SEPARATOR."weathermap.permissions.test"; |
54 | | | $testfd = fopen($testfile, 'w'); |
55 | | | if($testfd) |
56 | | | { |
57 | | | fclose($testfd); |
58 | | | unlink($testfile); |
59 | | | |
60 | | | $queryrows = db_fetch_assoc("select * from weathermap_maps where active='on' order by sortorder,id"); |
61 | | | |
62 | | | if( is_array($queryrows) ) |
63 | | | { |
64 | | | debug("Iterating all maps."); |
65 | | | |
66 | | | $imageformat = strtolower(read_config_option("weathermap_output_format")); |
67 | | | |
68 | | | foreach ($queryrows as $map) { |
69 | | | $mapfile = $confdir.DIRECTORY_SEPARATOR.$map['configfile']; |
70 | | | $htmlfile = $outdir.DIRECTORY_SEPARATOR."weathermap_".$map['id'].".html"; |
71 | | | $imagefile = $outdir.DIRECTORY_SEPARATOR."weathermap_".$map['id'].".".$imageformat; |
72 | | | $thumbimagefile = $outdir.DIRECTORY_SEPARATOR."weathermap_thumb_".$map['id'].".".$imageformat; |
73 | | | |
74 | | | if(file_exists($mapfile)) |
75 | | | { |
76 | | | if($quietlogging==0) warn("Map: $mapfile -> $htmlfile & $imagefile"); |
77 | 13 | simandl | weathermap_memory_check("MEM starting $mapcount"); |
78 | 1 | simandl | $wmap = new Weathermap; |
79 | | | $wmap->context = "cacti"; |
80 | | | |
81 | | | // we can grab the rrdtool path from Cacti's config, in this case |
82 | | | $wmap->rrdtool = read_config_option("path_rrdtool"); |
83 | | | |
84 | 13 | simandl | $wmap->ReadConfig($mapfile); |
85 | | | weathermap_memory_check("MEM postread $mapcount"); |
86 | 1 | simandl | $wmap->ReadData(); |
87 | 13 | simandl | weathermap_memory_check("MEM postdata $mapcount"); |
88 | 1 | simandl | |
89 | | | // $wmap->imageuri = $config['url_path'].'/plugins/weathermap/output/weathermap_'.$map['id'].".".$imageformat; |
90 | | | $wmap->imageuri = 'output/weathermap_'.$map['id'].".".$imageformat; |
91 | | | |
92 | | | if($quietlogging==0) warn("About to write image file. If this is the last message in your log, increase memory_limit in php.ini"); |
93 | 13 | simandl | weathermap_memory_check("MEM pre-render $mapcount"); |
94 | 1 | simandl | |
95 | | | $wmap->DrawMap($imagefile,$thumbimagefile,read_config_option("weathermap_thumbsize")); |
96 | 13 | simandl | |
97 | 1 | simandl | if($quietlogging==0) warn("Wrote map to $imagefile and $thumbimagefile"); |
98 | | | $fd = @fopen($htmlfile, 'w'); |
99 | | | if($fd != FALSE) |
100 | | | { |
101 | | | fwrite($fd, $wmap->MakeHTML('weathermap_'.$map['id'].'_imap')); |
102 | | | fclose($fd); |
103 | | | debug("Wrote HTML to $htmlfile"); |
104 | | | } |
105 | | | else |
106 | | | { |
107 | | | if(file_exists($htmlfile)) |
108 | | | { |
109 | | | warn("Failed to overwrite $htmlfile - permissions of existing file are wrong?\n"); |
110 | | | } |
111 | | | else |
112 | | | { |
113 | | | warn("Failed to create $htmlfile - permissions of output directory are wrong?\n"); |
114 | | | } |
115 | | | } |
116 | | | |
117 | | | db_execute("update weathermap_maps set titlecache='".mysql_real_escape_string($wmap->title)."' where id=".$map['id']); |
118 | 13 | simandl | |
119 | | | unset($wmap); |
120 | | | weathermap_memory_check("MEM after $mapcount"); |
121 | 1 | simandl | $mapcount++; |
122 | | | } |
123 | | | else |
124 | | | { |
125 | | | warn("Mapfile $mapfile is not readable or doesn't exist"); |
126 | | | } |
127 | | | } |
128 | | | debug("Iterated all $mapcount maps."); |
129 | | | } |
130 | | | else |
131 | | | { |
132 | | | if($quietlogging==0) warn("No activated maps found."); |
133 | | | } |
134 | | | } |
135 | | | else |
136 | | | { |
137 | | | warn("Output directory ($outdir) isn't writable (tried to create '$testfile'). No maps created. You probably need to make it writable by the poller process (like you did with the RRA directory)"); |
138 | | | } |
139 | | | } |
140 | | | else |
141 | | | { |
142 | | | warn("Output directory ($outdir) doesn't exist!. No maps created. You probably need to create that directory, and make it writable by the poller process (like you did with the RRA directory)"); |
143 | | | } |
144 | 13 | simandl | weathermap_memory_check("MEM Final"); |
145 | 1 | simandl | chdir($orig_cwd); |
146 | | | if($quietlogging==0) warn("Weathermap $WEATHERMAP_VERSION run complete - $mapcount maps were run"); |
147 | | | } |
148 | | | else |
149 | | | { |
150 | | | warn("Required modules for PHP Weathermap $WEATHERMAP_VERSION were not present. Not running."); |
151 | | | } |
152 | | | } |
153 | | | |
154 | | | |
155 | | | // vim:ts=4:sw=4: |
156 | | | ?> |