-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.php
113 lines (93 loc) · 3.54 KB
/
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once "classes/Config.php";
require_once "classes/Retriever.php";
require_once "classes/Validator.php";
require_once "classes/StatusValidator.php";
require_once "classes/ContentValidator.php";
require_once "classes/Writer.php";
require_once "classes/FilesystemCleaner.php";
require_once "classes/Timer.php";
require_once "objects/Request.php";
require_once "objects/ValidationResult.php";
require_once "objects/ServiceResult.php";
require_once "objects/Result.php";
class Main {
const VERSION = 1;
private $config;
private $writer;
private $timer;
private $fs_cleaner;
public function init() {
$this->config = new Config();
$this->writer = new Writer($this->config);
$this->timer = new Timer();
$this->fs_cleaner = new FilesystemCleaner($this->config);
}
public function run() {
try{
$this->timer->start('general');
$result = new Result();
$result->version = self::VERSION;
$result->date = date("Y-m-d H:i:s");
$services = $this->config->getServices();
foreach($services as $service) {
$this->timer->start($service['id']);
$service_result = new ServiceResult();
$service_result->service_id = $service['id'];
$service_result->service_name = $service['name'];
$request = new Request($service['url']);
$validators = $this->setValidatorsFromService($service);
try {
(new Retriever())->requestUrl($request);
$service_result->request = $request;
foreach($validators as $validator) {
$validation_result = new ValidationResult();
$validation_result->validation_class = get_class($validator);
$validation_result->valid_value = $validator->getValidValue();
$validation_result->is_valid = $validator->isValid($request);
$service_result->validation_results[] = $validation_result;
}
$service_result->error = false;
} catch (Exception $e) {
$service_result->request = $request;
$service_result->error = $e;
}
$service_result->duration = $this->timer->stop($service['id']);
$result->service_results[] = $service_result;
}
$result->duration = $this->timer->stop('general');
$this->writer->writeResults($result);
} catch (Exception $e) {
var_dump($e);
}
}
public function maintenance() {
$this->fs_cleaner->archiveOldResultFiles();
}
private function setValidatorsFromService($service) {
$validators = [];
foreach($service["validate"] as $rule => $value) {
$validatorClass = "";
switch ($rule) {
case "http-status":
$validatorClass = StatusValidator::class;
break;
case "dom-contains":
$validatorClass = ContentValidator::class;
break;
}
$validator = new $validatorClass();
$validator->setValidValue($value);
$validators[] = $validator;
}
return $validators;
}
}
$app = new Main();
$app->init();
$app->run();
$app->maintenance();
?>