Revize 6806f46f
Přidáno uživatelem horkym před téměř 7 roky(ů)
cron/cron.php | ||
---|---|---|
6 | 6 |
require_once "process_traffic_matrix.php"; |
7 | 7 |
|
8 | 8 |
function year_cron() { |
9 |
// Stazeni dat za posledni rok. |
|
9 | 10 |
for ($i = 365; $i > 0; $i--) { |
10 | 11 |
$date = new DateTime(); |
11 | 12 |
$date->modify("-$i day"); |
... | ... | |
14 | 15 |
} |
15 | 16 |
|
16 | 17 |
function cron() { |
18 |
// Stazeni dat z minuleho dne. |
|
17 | 19 |
$date = new DateTime(); |
18 | 20 |
$date->modify("-1 day"); |
19 | 21 |
cron_procedure($date); |
20 | 22 |
} |
21 | 23 |
|
24 |
// Funkce, ktera je volana bud cron() nebo year_cron() a ktera stahne data pro dany den. |
|
22 | 25 |
function cron_procedure($date) { |
23 | 26 |
// Kvuli timeoutu. |
24 | 27 |
set_time_limit(0); |
25 | 28 |
|
29 |
// Vytvoreni objektu pro komunikaci s DB. |
|
26 | 30 |
$dbh = new DB_WEB(); |
27 | 31 |
$DAO = new DAO(); |
28 | 32 |
$DAO->setDB($dbh); |
29 | 33 |
|
34 |
// Objekt pro logovani. |
|
35 |
$logs = new Logging(); |
|
36 |
|
|
30 | 37 |
if ($date != NULL && $DAO->controlTrafficData($date->format("Y-m-d"))) { |
31 |
$parser = new Parser(); |
|
38 |
$logs->log(Logging::INFO, "Data k vybranemu dni (".$date->format("d.m.Y").") jeste v databazi nejsou."); |
|
39 |
$parser = new Parser($logs); |
|
32 | 40 |
$parser->doWork($date->format("Ymd")); |
33 | 41 |
|
34 | 42 |
$traffic = $parser->getTraffic(); |
... | ... | |
48 | 56 |
$insertOneDay = array(); |
49 | 57 |
process_traffic_matrix($parser, $traffic, $trafficOneDay, $DAO->findFirstId("zaznam_cas"), $DAO->findFirstId("zaznam"), $DAO->findFirstId("zaznam_prum_den"), $insertRTT, $insertRT, $insertOneDay, $date->format("Y-m-d")); |
50 | 58 |
$DAO->insertTrafficData($insertRTT, $insertRT, $insertOneDay); |
59 |
} else if ($date != NULL) { |
|
60 |
// Data pro vybrany den uz v databazi jsou. |
|
61 |
$logs->log(Logging::WARNING, "Pro vybrany den (".$date->format("d.m.Y").") jiz data v databazi jsou."); |
|
51 | 62 |
} |
52 | 63 |
} |
53 | 64 |
|
cron/log/cron.txt | ||
---|---|---|
1 |
21.05.2018 21:08:55.799 |
|
2 |
--- INFO --- |
|
3 |
Data k vybranemu dni jeste v databazi nejsou. |
|
4 |
|
|
5 |
21.05.2018 21:08:55.811 |
|
6 |
--- INFO --- |
|
7 |
ZACATEK PROCEDURY pro den 20.05.2018. |
|
8 |
|
|
9 |
21.05.2018 21:09:01.904 |
|
10 |
--- INFO --- |
|
11 |
Stazeni archivu probehlo v poradku. |
|
12 |
|
|
13 |
21.05.2018 21:09:02.588 |
|
14 |
--- INFO --- |
|
15 |
Extrahovani archivu v poradku dokonceno. |
|
16 |
|
|
17 |
21.05.2018 21:09:02.598 |
|
18 |
--- INFO --- |
|
19 |
Zpracovavani zaznamu o doprave. |
|
20 |
|
|
21 |
21.05.2018 21:11:08.933 |
|
22 |
--- INFO --- |
|
23 |
Zpracovavani zaznamu o lokacich. |
|
24 |
|
|
25 |
21.05.2018 21:11:08.945 |
|
26 |
--- INFO --- |
|
27 |
Odstranovani slozky s extrahovanymi daty. |
|
28 |
|
|
29 |
21.05.2018 21:11:08.969 |
|
30 |
--- INFO --- |
|
31 |
KONEC PROCEDURY. |
|
32 |
|
|
33 |
21.05.2018 21:22:56.954 |
|
34 |
--- WARNING --- |
|
35 |
Pro vybrany den (20.05.2018) jiz data v databazi jsou. |
|
36 |
|
cron/logging.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
class Logging { |
|
4 |
|
|
5 |
// Zpravy jsou pouze informativni. |
|
6 |
const INFO = 0; |
|
7 |
// Jedna se o mene zavazne stavy - treba data pro dany den jeste neexistuji. |
|
8 |
const WARNING = 1; |
|
9 |
// Doslo k padu cele procedury - napr. nepovedlo se vytvorit slozku pro extrahovana data. |
|
10 |
const ERROR = 2; |
|
11 |
|
|
12 |
// Soubor, do ktereho se budou zaznamy vkladat (defaultne ve slozce log). |
|
13 |
private $log_file; |
|
14 |
|
|
15 |
public function __construct() { |
|
16 |
$this->log_file = "log/cron.txt"; |
|
17 |
} |
|
18 |
|
|
19 |
public function log($type, $message) { |
|
20 |
$type_str = ""; |
|
21 |
switch ($type) { |
|
22 |
case self::INFO: $type_str = "INFO"; break; |
|
23 |
case self::WARNING: $type_str = "WARNING"; break; |
|
24 |
default: $type_str = "ERROR"; break; |
|
25 |
} |
|
26 |
|
|
27 |
$micro_date = microtime(); |
|
28 |
$date_array = explode(" ", $micro_date); |
|
29 |
$date = sprintf("%s.%03d", date("d.m.Y H:i:s", $date_array[1]), (int) ($date_array[0] * 1000)); |
|
30 |
|
|
31 |
file_put_contents($this->log_file, "$date\r\n--- $type_str ---\r\n$message\r\n\r\n", FILE_APPEND); |
|
32 |
} |
|
33 |
|
|
34 |
} |
|
35 |
|
|
36 |
?> |
cron/parser.php | ||
---|---|---|
2 | 2 |
|
3 | 3 |
require_once "traffic.php"; |
4 | 4 |
require_once "location.php"; |
5 |
require_once "logging.php"; |
|
5 | 6 |
|
6 | 7 |
class Parser { |
7 | 8 |
|
... | ... | |
26 | 27 |
// Skoro to same jako $traffic, akorat bez rozmeru pro casove intervaly. |
27 | 28 |
private $trafficOneDay; |
28 | 29 |
|
29 |
public function __construct() { |
|
30 |
// Objekt pro logovani do souboru cron.txt ve slozce log. |
|
31 |
private $logs; |
|
32 |
|
|
33 |
public function __construct($logs) { |
|
30 | 34 |
$this->name = "DOPR_D_"; |
31 | 35 |
$this->path = "http://doprava.plzensky-kraj.cz/opendata/doprava/den/".$this->name; |
32 | 36 |
|
... | ... | |
37 | 41 |
$this->intervalMilli = (int) (24 * 3600000 / $this->HOW_MANY_INTERVALS); |
38 | 42 |
$this->traffic = array(); |
39 | 43 |
$this->trafficOneDay = array(); |
44 |
|
|
45 |
$this->logs = $logs; |
|
40 | 46 |
} |
41 | 47 |
|
42 | 48 |
public function doWork($date) { |
49 |
$this->logs->log(Logging::INFO, "ZACATEK PROCEDURY pro den ".DateTime::createFromFormat("Ymd", $date)->format("d.m.Y")."."); |
|
50 |
|
|
43 | 51 |
$zipUrl = $this->path.$date.".zip"; |
44 | 52 |
$dir = "download/$date/"; |
45 | 53 |
$downloaded = $dir."downloaded.zip"; |
... | ... | |
54 | 62 |
} |
55 | 63 |
|
56 | 64 |
if ($ok == 0 || $result == 1) { |
65 |
$this->logs->log(Logging::INFO, "Zpracovavani zaznamu o doprave."); |
|
57 | 66 |
$this->parse($dir.$this->name.$date.".csv", TRUE); |
67 |
|
|
68 |
$this->logs->log(Logging::INFO, "Zpracovavani zaznamu o lokacich."); |
|
58 | 69 |
$this->parse($dir."Locations.csv", FALSE); |
59 | 70 |
// return; odkomentovat v pripade, ze extrahovana data nemaji byt odstranena. |
60 | 71 |
} |
61 | 72 |
|
73 |
$this->logs->log(Logging::INFO, "Odstranovani slozky s extrahovanymi daty."); |
|
62 | 74 |
$this->deleteDir($dir); |
63 | 75 |
|
64 | 76 |
} |
77 |
|
|
78 |
$this->logs->log(Logging::INFO, "KONEC PROCEDURY."); |
|
65 | 79 |
} |
66 | 80 |
|
67 | 81 |
private function parse($fileName, $traffic) { |
... | ... | |
128 | 142 |
if (mkdir($dir)) { |
129 | 143 |
if (copy($zipUrl, $downloaded)) { |
130 | 144 |
// Stazeni probehlo v poradku. |
145 |
$this->logs->log(Logging::INFO, "Stazeni archivu probehlo v poradku."); |
|
131 | 146 |
return 0; |
132 | 147 |
} else { |
133 | 148 |
// Nepovedlo se stazeni zip souboru. |
149 |
$this->logs->log(Logging::ERROR, "Nepovedlo se stazeni archivu."); |
|
134 | 150 |
return -1; |
135 | 151 |
} |
136 | 152 |
} else { |
137 | 153 |
// Nepodarilo se vytvorit slozku pro data. |
154 |
$this->logs->log(Logging::ERROR, "Nepodarilo se vytvorit slozku pro data."); |
|
138 | 155 |
return -2; |
139 | 156 |
} |
140 | 157 |
} else { |
141 | 158 |
// Data k vybranemu dni jiz byla stazena. |
159 |
$this->logs->log(Logging::INFO, "Data k vybranemu dni jiz byla stazena."); |
|
142 | 160 |
return 1; |
143 | 161 |
} |
144 | 162 |
} else { |
145 | 163 |
// Pro dany datum neexistuji data. |
164 |
$this->logs->log(Logging::WARNING, "Pro dany datum neexistuji data."); |
|
146 | 165 |
return -3; |
147 | 166 |
} |
148 | 167 |
} |
... | ... | |
153 | 172 |
$zip->extractTo($dir); |
154 | 173 |
$zip->close(); |
155 | 174 |
// Extrahovani v poradku dokonceno. |
175 |
$this->logs->log(Logging::INFO, "Extrahovani archivu v poradku dokonceno."); |
|
156 | 176 |
return 0; |
157 | 177 |
} else { |
158 | 178 |
// Nepovedlo se extrahovani obsahu zipu. |
179 |
$this->logs->log(Logging::ERROR, "Pri extrahovani archivu doslo k chybe."); |
|
159 | 180 |
return -1; |
160 | 181 |
} |
161 | 182 |
} |
Také k dispozici: Unified diff
refs #6919: Logy
Vytvorena trida pro logovani. Vyuziti v hlavnim skriptu a ve tride Parser (pro objekty komunikujici s databazi zatim nevyuzito). Pridan ukazkovy vystupni soubor.