Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 6806f46f

Přidáno uživatelem horkym před téměř 7 roky(ů)

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.

Zobrazit rozdíly:

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