Lines 25-30
use POSIX qw(strftime);
Link Here
|
25 |
use LWP::UserAgent; |
25 |
use LWP::UserAgent; |
26 |
use JSON; |
26 |
use JSON; |
27 |
|
27 |
|
|
|
28 |
=head1 NAME C4::UsageStats |
29 |
|
30 |
=head1 DESCRIPTION |
31 |
|
32 |
This package contains what is needed to report Koha statistics to hea |
33 |
hea.koha-community.org is the server that centralize Koha setups informations |
34 |
Koha libraries are encouraged to provide informations about their collections, |
35 |
their structure,... |
36 |
|
37 |
This package is normally only called by a cronjob, like |
38 |
0 3 1 * * export KOHA_CONF=/home/koha/etc/koha-conf.xml; export PERL5LIB=/home/koha/src; perl /home/koha/src/C4/UsageStats.pm |
39 |
|
40 |
IMPORTANT : please do NOT run the cron on the 1st, but on another day. The idea is to avoid all |
41 |
Koha libraries sending their data at the same time ! So choose any day between 1 and 28 ! |
42 |
|
43 |
|
44 |
=head2 NeedUpdate |
45 |
|
46 |
$needUpdateYN = C4::UsageStats::NeedUpdate; |
47 |
|
48 |
Returns Y (1) if the last update is more than 1 month old |
49 |
This way, even if the cronjob is run every minute, the webservice will be called |
50 |
only once a month ! |
51 |
|
52 |
=cut |
53 |
|
28 |
sub NeedUpdate { |
54 |
sub NeedUpdate { |
29 |
my $lastupdated = C4::Context->preference('UsageStatsLastUpdateTime') || 0; |
55 |
my $lastupdated = C4::Context->preference('UsageStatsLastUpdateTime') || 0; |
30 |
my $now = strftime("%s", localtime); |
56 |
my $now = strftime("%s", localtime); |
Lines 36-41
sub NeedUpdate {
Link Here
|
36 |
return 0; |
62 |
return 0; |
37 |
} |
63 |
} |
38 |
|
64 |
|
|
|
65 |
=head2 LaunchCron |
66 |
|
67 |
LaunchCron(); |
68 |
|
69 |
Compute results and send them to the centralized server |
70 |
|
71 |
=cut |
72 |
|
39 |
sub LaunchCron { |
73 |
sub LaunchCron { |
40 |
if (!C4::Context->preference('UsageStatsShare')) { |
74 |
if (!C4::Context->preference('UsageStatsShare')) { |
41 |
die ("UsageStats is not configured"); |
75 |
die ("UsageStats is not configured"); |
Lines 43-52
sub LaunchCron {
Link Here
|
43 |
if (NeedUpdate) { |
77 |
if (NeedUpdate) { |
44 |
C4::Context->set_preference('UsageStatsLastUpdateTime', strftime("%s", localtime)); |
78 |
C4::Context->set_preference('UsageStatsLastUpdateTime', strftime("%s", localtime)); |
45 |
my $data = BuildReport(); |
79 |
my $data = BuildReport(); |
46 |
ReportToComunity($data); |
80 |
ReportToCommunity($data); |
47 |
} |
81 |
} |
48 |
} |
82 |
} |
49 |
|
83 |
|
|
|
84 |
=head2 Builreport |
85 |
|
86 |
BuildReport(); |
87 |
|
88 |
retrieve some database volumety and systempreferences that will be sent to hea server |
89 |
|
90 |
=cut |
91 |
|
50 |
sub BuildReport { |
92 |
sub BuildReport { |
51 |
my $report = { |
93 |
my $report = { |
52 |
'library' => { |
94 |
'library' => { |
Lines 61-80
sub BuildReport {
Link Here
|
61 |
} |
103 |
} |
62 |
|
104 |
|
63 |
# Get systempreferences. |
105 |
# Get systempreferences. |
64 |
foreach (qw/IntranetBiblioDefaultView marcflavour/) { |
106 |
foreach (qw/ AcqCreateItem |
|
|
107 |
AcqWarnOnDuplicateInvoice |
108 |
AcqViewBaskets |
109 |
BasketConfirmations |
110 |
OrderPdfFormat |
111 |
casAuthentication |
112 |
casLogout |
113 |
AllowPkiAuth |
114 |
DebugLevel |
115 |
delimiter |
116 |
noItemTypeImages |
117 |
virtualshelves |
118 |
AutoLocation |
119 |
IndependentBranches |
120 |
SessionStorage |
121 |
Persona |
122 |
AuthDisplayHierarchy |
123 |
AutoCreateAuthorities |
124 |
BiblioAddsAuthorities |
125 |
dontmerge |
126 |
UseAuthoritiesForTracings |
127 |
CatalogModuleRelink |
128 |
hide_marc |
129 |
IntranetBiblioDefaultView |
130 |
LabelMARCView |
131 |
OpacSuppression |
132 |
SeparateHoldings |
133 |
UseControlNumber |
134 |
advancedMARCeditor |
135 |
DefaultClassificationSource |
136 |
EasyAnalyticalRecords |
137 |
autoBarcode |
138 |
item-level_itypes |
139 |
marcflavour |
140 |
PrefillItem |
141 |
z3950NormalizeAuthor |
142 |
SpineLabelAutoPrint |
143 |
SpineLabelShowPrintOnBibDetails |
144 |
BlockReturnOfWithdrawnItems |
145 |
CalculateFinesOnReturn |
146 |
AgeRestrictionOverride |
147 |
AllFinesNeedOverride |
148 |
AllowFineOverride |
149 |
AllowItemsOnHoldCheckout |
150 |
AllowNotForLoanOverride |
151 |
AllowRenewalLimitOverride |
152 |
AllowReturnToBranch |
153 |
AllowTooManyOverride |
154 |
AutomaticItemReturn |
155 |
AutoRemoveOverduesRestrictions |
156 |
CircControl |
157 |
HomeOrHoldingBranch |
158 |
HomeOrHoldingBranchReturn |
159 |
InProcessingToShelvingCart |
160 |
IssueLostItem |
161 |
IssuingInProcess |
162 |
ManInvInNoissuesCharge |
163 |
OverduesBlockCirc |
164 |
RenewalPeriodBase |
165 |
RenewalSendNotice |
166 |
RentalsInNoissuesCharge |
167 |
ReturnBeforeExpiry |
168 |
ReturnToShelvingCart |
169 |
TransfersMaxDaysWarning |
170 |
UseBranchTransferLimits |
171 |
useDaysMode |
172 |
UseTransportCostMatrix |
173 |
UseCourseReserves |
174 |
finesCalendar |
175 |
FinesIncludeGracePeriod |
176 |
finesMode |
177 |
RefundLostItemFeeOnReturn |
178 |
WhenLostChargeReplacementFee |
179 |
WhenLostForgiveFine |
180 |
AllowHoldDateInFuture |
181 |
AllowHoldPolicyOverride |
182 |
AllowHoldsOnDamagedItems |
183 |
AllowHoldsOnPatronsPossessions |
184 |
AllowOnShelfHolds |
185 |
AutoResumeSuspendedHolds |
186 |
canreservefromotherbranches |
187 |
decreaseLoanHighHolds |
188 |
DisplayMultiPlaceHold |
189 |
emailLibrarianWhenHoldIsPlaced |
190 |
ExpireReservesMaxPickUpDelay |
191 |
OPACAllowHoldDateInFuture |
192 |
OPACAllowUserToChooseBranch |
193 |
ReservesControlBranch |
194 |
ReservesNeedReturns |
195 |
SuspendHoldsIntranet |
196 |
SuspendHoldsOpac |
197 |
TransferWhenCancelAllWaitingHolds |
198 |
AllowAllMessageDeletion |
199 |
AllowOfflineCirculation |
200 |
CircAutocompl |
201 |
CircAutoPrintQuickSlip |
202 |
DisplayClearScreenButton |
203 |
FilterBeforeOverdueReport |
204 |
FineNotifyAtCheckin |
205 |
itemBarcodeFallbackSearch |
206 |
itemBarcodeInputFilter |
207 |
previousIssuesDefaultSortOrder |
208 |
RecordLocalUseOnReturn |
209 |
soundon |
210 |
SpecifyDueDate |
211 |
todaysIssuesDefaultSortOrder |
212 |
UpdateTotalIssuesOnCirc |
213 |
UseTablesortForCirc |
214 |
WaitingNotifyAtCheckin |
215 |
AllowSelfCheckReturns |
216 |
AutoSelfCheckAllowed |
217 |
FRBRizeEditions |
218 |
OPACFRBRizeEditions |
219 |
AmazonCoverImages |
220 |
OPACAmazonCoverImages |
221 |
Babeltheque |
222 |
BakerTaylorEnabled |
223 |
GoogleJackets |
224 |
HTML5MediaEnabled |
225 |
IDreamBooksReadometer |
226 |
IDreamBooksResults |
227 |
IDreamBooksReviews |
228 |
LibraryThingForLibrariesEnabled |
229 |
LocalCoverImages |
230 |
OPACLocalCoverImages |
231 |
NovelistSelectEnabled |
232 |
XISBN |
233 |
OpenLibraryCovers |
234 |
UseKohaPlugins |
235 |
SyndeticsEnabled |
236 |
TagsEnabled |
237 |
CalendarFirstDayOfWeek |
238 |
opaclanguagesdisplay |
239 |
AuthoritiesLog |
240 |
BorrowersLog |
241 |
CataloguingLog |
242 |
FinesLog |
243 |
IssueLog |
244 |
LetterLog |
245 |
ReturnLog |
246 |
SubscriptionLog |
247 |
AuthorisedValueImages |
248 |
BiblioDefaultView |
249 |
COinSinOPACResults |
250 |
DisplayOPACiconsXSLT |
251 |
hidelostitems |
252 |
HighlightOwnItemsOnOPAC |
253 |
OpacAddMastheadLibraryPulldown |
254 |
OPACDisplay856uAsImage |
255 |
OpacHighlightedWords |
256 |
OpacKohaUrl |
257 |
OpacMaintenance |
258 |
OpacPublic |
259 |
OpacSeparateHoldings |
260 |
OPACShowBarcode |
261 |
OPACShowCheckoutName |
262 |
OpacShowFiltersPulldownMobile |
263 |
OPACShowHoldQueueDetails |
264 |
OpacShowLibrariesPulldownMobile |
265 |
OpacShowRecentComments |
266 |
OPACShowUnusedAuthorities |
267 |
OpacStarRatings |
268 |
opacthemes |
269 |
OPACURLOpenInNewWindow |
270 |
OpacAuthorities |
271 |
opacbookbag |
272 |
OpacBrowser |
273 |
OpacBrowseResults |
274 |
OpacCloud |
275 |
OPACFinesTab |
276 |
OpacHoldNotes |
277 |
OpacItemLocation |
278 |
OpacPasswordChange |
279 |
OPACPatronDetails |
280 |
OPACpatronimages |
281 |
OPACPopupAuthorsSearch |
282 |
OpacTopissue |
283 |
opacuserlogin |
284 |
QuoteOfTheDay |
285 |
RequestOnOpac |
286 |
reviewson |
287 |
ShowReviewer |
288 |
ShowReviewerPhoto |
289 |
SocialNetworks |
290 |
suggestion |
291 |
AllowPurchaseSuggestionBranchChoice |
292 |
OpacAllowPublicListCreation |
293 |
OpacAllowSharingPrivateLists |
294 |
OPACItemHolds |
295 |
OpacRenewalAllowed |
296 |
OpacRenewalBranch |
297 |
OPACViewOthersSuggestions |
298 |
SearchMyLibraryFirst |
299 |
singleBranchMode |
300 |
AnonSuggestions |
301 |
EnableOpacSearchHistory |
302 |
OPACPrivacy |
303 |
opacreadinghistory |
304 |
TrackClicks |
305 |
PatronSelfRegistration |
306 |
OPACShelfBrowser |
307 |
AddPatronLists |
308 |
AutoEmailOpacUser |
309 |
AutoEmailPrimaryAddress |
310 |
autoMemberNum |
311 |
BorrowerRenewalPeriodBase |
312 |
checkdigit |
313 |
EnableBorrowerFiles |
314 |
EnhancedMessagingPreferences |
315 |
ExtendedPatronAttributes |
316 |
intranetreadinghistory |
317 |
memberofinstitution |
318 |
patronimages |
319 |
TalkingTechItivaPhoneNotification |
320 |
uppercasesurnames |
321 |
IncludeSeeFromInSearches |
322 |
OpacGroupResults |
323 |
QueryAutoTruncate |
324 |
QueryFuzzy |
325 |
QueryStemming |
326 |
QueryWeightFields |
327 |
TraceCompleteSubfields |
328 |
TraceSubjectSubdivisions |
329 |
UseICU |
330 |
UseQueryParser |
331 |
defaultSortField |
332 |
displayFacetCount |
333 |
OPACdefaultSortField |
334 |
OPACItemsResultsDisplay |
335 |
expandedSearchOption |
336 |
IntranetNumbersPreferPhrase |
337 |
OPACNumbersPreferPhrase |
338 |
opacSerialDefaultTab |
339 |
RenewSerialAddsSuggestion |
340 |
RoutingListAddReserves |
341 |
RoutingSerials |
342 |
SubscriptionHistory |
343 |
Display856uAsImage |
344 |
DisplayIconsXSLT |
345 |
StaffAuthorisedValueImages |
346 |
template |
347 |
yuipath |
348 |
HidePatronName |
349 |
intranetbookbag |
350 |
StaffDetailItemSelection |
351 |
viewISBD |
352 |
viewLabeledMARC |
353 |
viewMARC |
354 |
ILS-DI |
355 |
OAI-PMH |
356 |
version/) { |
65 |
$report->{systempreferences}{$_} = C4::Context->preference($_); |
357 |
$report->{systempreferences}{$_} = C4::Context->preference($_); |
66 |
} |
358 |
} |
67 |
return $report; |
359 |
return $report; |
68 |
} |
360 |
} |
69 |
|
361 |
|
70 |
sub ReportToComunity { |
362 |
=head2 ReportToCommunity |
|
|
363 |
|
364 |
ReportToCommunity; |
365 |
|
366 |
Send to hea.koha-community.org database informations |
367 |
|
368 |
=cut |
369 |
|
370 |
sub ReportToCommunity { |
71 |
my $data = shift; |
371 |
my $data = shift; |
72 |
my $json = to_json($data); |
372 |
my $json = to_json($data); |
73 |
|
373 |
|
74 |
my $url = C4::Context->config('mebaseurl'); |
|
|
75 |
|
76 |
my $ua = LWP::UserAgent->new; |
374 |
my $ua = LWP::UserAgent->new; |
77 |
my $req = HTTP::Request->new(POST => "$url/upload.pl"); |
375 |
my $req = HTTP::Request->new(POST => "http://hea.koha-community.org/upload.pl"); |
78 |
$req->content_type('application/x-www-form-urlencoded'); |
376 |
$req->content_type('application/x-www-form-urlencoded'); |
79 |
$req->content("data=$json"); |
377 |
$req->content("data=$json"); |
80 |
my $res = $ua->request($req); |
378 |
my $res = $ua->request($req); |
Lines 82-87
sub ReportToComunity {
Link Here
|
82 |
C4::Context->set_preference('UsageStatsID', $content->{library}{library_id}); |
380 |
C4::Context->set_preference('UsageStatsID', $content->{library}{library_id}); |
83 |
} |
381 |
} |
84 |
|
382 |
|
|
|
383 |
=head2 _count |
384 |
|
385 |
$data = _count($table); |
386 |
|
387 |
Count the number of records in $table tables |
388 |
|
389 |
=cut |
390 |
|
85 |
sub _count { |
391 |
sub _count { |
86 |
my $table = shift; |
392 |
my $table = shift; |
87 |
|
393 |
|
88 |
- |
|
|