/*================================================== project: submit the most popular queries Author: R.Andres Castaneda E-email: acastanedaa@worldbank.org 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_cache, rclass syntax [anything(name=subcmd)], [ /// STime(integer 100) /// Sleep Time server(string) /// ] version 16 /*================================================== 1: ==================================================*/ qui { *----------1.1: global pip_cmds_ssc = 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(`server') pip wb, povline(`pp') clear server(`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(`server') sleep `stime' pip, povline(`pv') clear server(`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(`server') sleep `stime' pip, povline(`pv') clear server(`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(`server') // to initiate pip, countr(COL) povline(`=`pp'+.01') clear server(`server') // to initiate pip, countr(COL) povline(`=`pp'+.01') clear server(`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(`server') sleep `stime' pip, countr(`country') povline(3.2) clear server(`server') sleep `stime' pip, countr(`country') povline(5.5) clear server(`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: