-
Notifications
You must be signed in to change notification settings - Fork 0
/
ow_onecall.install
137 lines (130 loc) · 4.55 KB
/
ow_onecall.install
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
/**
* @file
* Install, update and uninstall functions for the OpenWeather API module.
*/
/**
* Implements hook_schema().
*/
function ow_onecall_schema() {
$schema = [
'onecall_count' => [
'description' => 'Logs the number of calls to the OpenWeather One Call API with this module.',
'fields' => [
'id' => [
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
'description' => 'Primary Key: Unique ID.',
],
'call_date' => [
'type' => 'int',
'description' => 'The day for the API call log.',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'size' => 'normal'
],
'type_weather' => [
'type' => 'int',
'description' => 'The number of calls for the given date for weather.',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'size' => 'normal'
],
'type_geocode' => [
'type' => 'int',
'description' => 'The number of calls for the given date for geocode.',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'size' => 'normal'
],
'type_reverse_geocode' => [
'type' => 'int',
'description' => 'The number of calls for the given date for reverse geocode.',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'size' => 'normal'
],
'type_historical' => [
'type' => 'int',
'description' => 'The number of calls for the given date for historical weather.',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'size' => 'normal'
],
'type_aggregation' => [
'type' => 'int',
'description' => 'The number of calls for the given date for aggregated weather.',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'size' => 'normal'
],
'type_overview' => [
'type' => 'int',
'description' => 'The number of calls for the given date for weather overview.',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'size' => 'normal'
],
],
'primary key' => ['id'],
'indexes' => [
'idx_call_date' => ['call_date']
]
]
];
return $schema;
}
/**
* Implements hook_requirements().
*/
function ow_onecall_requirements($phase) {
$requirements = [];
if ( $phase == 'runtime') {
$today = new \DateTime();
$today->setTime(0, 0, 0);
$result = \Drupal::database()
->query("SELECT * FROM {onecall_count} WHERE call_date = :today", [':today' => $today->getTimestamp()], [], ['fetch' => PDO::FETCH_ASSOC])->fetchAll();
if ( $result ) {
$result = $result[0];
$total = (int) $result->type_weather + (int) $result->type_geocode + (int) $result->type_reverse_geocode + (int) $result->type_historical + (int) $result->type_aggregation + (int) $result->type_overview;
if ( $total <= 750 ) {
$status = REQUIREMENT_OK;
} elseif ($total > 750 && $total < 1000) {
$status = REQUIREMENT_WARNING;
} elseif ( $total >= 1000 ) {
$status = REQUIREMENT_ERROR;
}
$replacements = [
'@count' => $total,
'@weather_count' => $result->type_weather,
'@geo_count' => $result->type_geocode,
'@rgeo_count' => $result->type_reverse_geocode,
'@historical_count' => $result->type_historical,
'@daily_count' => $result->type_aggregation,
'@overview_count' => $result->type_overview,
];
$description = t('<p>There have been @count One Call API request(s) today. (Current weather: @weather_count, Weather overview: @overview_count, Historical weather: @historical_count, Daily weather aggregation: @daily_count, Geocode: @geo_count, Reverse geocode: @rgeo_count)</p>', $replacements);
$requirements['ow_onecall'] = [
'title' => t('One Call API'),
'description' => $description,
'severity' => $status,
];
} else {
$requirements['ow_onecall'] = [
'title' => t('One Call API'),
'value' => 0,
'description' => t('There have been 0 One Call API requests today.'),
'severity' => REQUIREMENT_OK
];
}
}
return $requirements;
}