-
Notifications
You must be signed in to change notification settings - Fork 6
/
pip_precache.ado
289 lines (203 loc) · 6.48 KB
/
pip_precache.ado
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
/*==================================================
project: submit the most popular queries
Author: R.Andres Castaneda
E-email: [email protected]
url:
Dependencies: The World Bank
----------------------------------------------------
Creation Date: 2 Feb 2022 - 11:05:15
Modification Date:
Do-file version: 01
References:
Output:
==================================================*/
/*==================================================
0: Program set up
==================================================*/
program define pip_precache, rclass
syntax [anything(name=subcmd)], [ ///
STime(integer 100) /// Sleep Time
server(string) ///
]
version 16.1
/*==================================================
1:
==================================================*/
qui {
*----------1.1:
global pip_old_session = "1" // make sure it does not execute again per session
local pp = round(runiform()*100, .01) // random poverty line
local stime 100
if ("`subcmd'" == "") local subcmd "all"
*----------1.2:
if (inlist("`subcmd'"), "all", "global") {
timer clear 1
timer on 1
pip, povline(`pp') clear server(${pip_server})
pip wb, povline(`pp') clear server(${pip_server})
timer off 1
timer list 1
local first_time = r(t1)
disp `first_time'
numlist "0.1(0.1)10"
local pvcents = "`r(numlist)'"
local npvc: word count `pvcents'
numlist "10(1)50"
local pvdollar = "`r(numlist)'"
local npvd: word count `pvdollar'
local est_time = `first_time'*`npvc' + /// time on cents loop
`first_time'*`npvd' + /// time on dollars loop
(`npvd'+`npvc') * (`stime'/1000) // extra time if leep between calls
/*=============================
// Loop over poverty lines by cents
=============================*/
noi disp as txt ". " in y "= saved successfully"
noi disp as txt "s " in y "= skipped - already exists (unchanged)"
noi disp as err "x " in y "= skipped - already exists (changed)"
noi disp as err "e " in y "= error"
noi disp ""
local i = 0
noi _dots 0, title(Caching all countries and WB request from \$0.1 to \$10 by increments of 10 cents) reps(`npvc')
noi pip_time_convertor `est_time', type(Estimated)
timer clear 2
timer on 2
foreach pv of local pvcents {
local ++i
cap {
pip wb, povline(`pv') clear server(${pip_server})
sleep `stime'
pip, povline(`pv') clear server(${pip_server})
sleep `stime'
}
if (_rc) {
noi _dots `i' 2
}
else {
noi _dots `i' 0
}
}
//========================================================
// loop over poverty lines by dollars
//========================================================
local i = 0
noi _dots 0, title(Caching all countries and WB request from \$10 to \$50 by dollar) reps(`npvd')
foreach pv of local pvdollar {
local ++i
cap {
pip wb, povline(`pv') clear server(${pip_server})
sleep `stime'
pip, povline(`pv') clear server(${pip_server})
sleep `stime'
}
if (_rc) {
noi _dots `i' 2
}
else {
noi _dots `i' 0
}
}
timer off 2
timer list 2
local act_time = r(t2)
noi pip_time_convertor `act_time', type(Actual)
} // end of global condition
if (inlist("`subcmd'"), "all", "country", "countries") {
timer clear 3
timer on 3
pip, countr(COL) povline(`pp') clear server(${pip_server}) // to initiate
pip, countr(COL) povline(`=`pp'+.01') clear server(${pip_server}) // to initiate
pip, countr(COL) povline(`=`pp'+.01') clear server(${pip_server}) // to initiate
timer off 3
timer list 3
local cty_time = r(t3)
frame _pip_cts {
levelsof country_code, local(countries) clean
}
local ncty: word count `countries'
* seconds of number of queries per country and poverty lines
local cty_n_queries = `cty_time'*`ncty'*3 + ///
(`ncty'*3) * (`stime'/1000) // extra time if sleep between calls
noi disp as txt ". " in y "= saved successfully"
noi disp as txt "s " in y "= skipped - already exists (unchanged)"
noi disp as err "x " in y "= skipped - already exists (changed)"
noi disp as err "e " in y "= error"
noi disp ""
local i = 0
noi _dots 0, title(caching country queries with basic poverty liens 1.90, 3.20, and 5.50) reps(`ncty')
noi pip_time_convertor `cty_n_queries', type(Estimated)
timer clear 4
timer on 4
foreach country of local countries {
local ++i
cap {
pip, countr(`country') clear server(${pip_server})
sleep `stime'
pip, countr(`country') povline(3.2) clear server(${pip_server})
sleep `stime'
pip, countr(`country') povline(5.5) clear server(${pip_server})
sleep `stime'
}
if (_rc) {
local cty_err "`cty_err' `country'"
noi _dots `i' 2
}
else {
noi _dots `i' 0
}
}
timer off 4
timer list 4
local cty_actual = r(t4)
noi pip_time_convertor `cty_actual', type(Actual)
if ("`cty_err'" != "") {
noi disp in red "countries with errors:" _n "`cty_err'"
}
} // end of countries condition
}
/*==================================================
2:
==================================================*/
*----------2.1:
*----------2.2:
end
//========================================================
// Extra programs
//========================================================
program define pip_time_convertor , rclass
syntax anything(name=time id="time in seconds"), ///
type(string) ///
[ ///
noPRINT ///
]
if (mod(`time'/(3600), 2) >= 1) {
local hour = `time'/3600 - mod(`time'/3600,2) + 1
local min_dec = 60*(mod(`time'/3600,2) - 1)
local minute = round(`min_dec')
local second = round(60*mod(`min_dec',1))
}
else if (mod(`time'/60, 2) >= 1) {
local hour = 0
local minute = `time'/60 - mod(`time'/60,2) + 1
local second = round(60*(mod(`time'/60,2) - 1))
}
else {
local hour = 0
local minute = `time'/60 - mod(`time'/60,2)
local second = round(60*mod(`time'/60,2))
}
if ("`print'" == "") {
disp _n "`type' time"
disp in y "hours: `hour'" _n "minutes: `minute'" _n "seconds: `second'"
}
return local hours = `hour'
return local minutes = `minute'
return local seconds = `second'
end
exit
/* End of do-file */
><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
Notes:
1.
2.
3.
Version Control: