X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Finc%2Fgenie.php;fp=www%2Fecrire%2Finc%2Fgenie.php;h=b601cd4a62089cb23239a929f1cd05635a6ab2e8;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/ecrire/inc/genie.php b/www/ecrire/inc/genie.php new file mode 100644 index 0000000..b601cd4 --- /dev/null +++ b/www/ecrire/inc/genie.php @@ -0,0 +1,154 @@ + periodicite) +// Cette fonction execute la tache la plus urgente +// (celle dont la date de derniere execution + la periodicite est minimale) +// La date de la derniere intervention est donnee par un fichier homonyme, +// de suffixe ".lock", modifie a chaque intervention et des le debut +// de celle-ci afin qu'un processus concurrent ne la demarre pas aussi. +// Les taches les plus longues sont tronconnees, ce qui impose d'antidater +// le fichier de verrouillage (avec la valeur absolue du code de retour). +// La fonction executant la tache est un homonyme de prefixe "genie_". +// Le fichier homonyme du repertoire "genie/" est automatiquement lu +// et il est suppose definir cette fonction. + +// http://doc.spip.org/@inc_genie_dist +function inc_genie_dist($taches = array()) { + + if (!$taches) + $taches = taches_generales(); + + // Quelle est la tache la plus urgente ? + $tache = ''; + $tmin = $t = time(); + foreach ($taches as $nom => $periode) { + $celock = _DIR_TMP . $nom . '.lock'; + $date_lock = @filemtime($celock); + if ($date_lock + $periode < $tmin) { + $tmin = $date_lock + $periode; + $tache = $nom; + $lock = $celock; + $last = $date_lock; + } + // debug : si la date du fichier est superieure a l'heure actuelle, + // c'est que les serveurs Http et de fichiers sont desynchro. + // Ca peut mettre en peril les taches cron : signaler dans le log + // (On laisse toutefois flotter sur une heure, pas la peine de s'exciter + // pour si peu) + else if ($date_lock > $t + 3600) + spip_log("Erreur de date du fichier $lock : $date_lock > $t !"); + } + if ($tache) { + spip_timer('tache'); + spip_log('cron: debut '.$tache, 'genie'); + touch($lock); + $cron = charger_fonction($tache, 'genie'); + $retour = $cron($last); + // si la tache a eu un effet : log + if ($retour) { + spip_log("cron: $tache (" . spip_timer('tache') . ") $retour", 'genie'); + if ($retour < 0) + @touch($lock, 0 - $retour); + } + } +} + +// +// Construction de la liste des taches. +// la cle est la tache, +// la valeur le temps minimal, en secondes, entre deux memes taches +// NE PAS METTRE UNE VALEUR INFERIEURE A 30 +// les serveurs Http n'accordant en general pas plus de 30 secondes +// a leur sous-processus +// +// http://doc.spip.org/@taches_generales +function taches_generales($taches_generales = array()) { + + // MAJ des rubriques publiques (cas de la publication post-datee) + // est fait au coup par coup a present + // $taches_generales['rubriques'] = 3600; + + // Optimisation de la base + $taches_generales['optimiser'] = 3600*48; + + // cache (chaque 20 minutes => 1/16eme du repertoire cache) + $taches_generales['invalideur'] = 1200; + + // nouveautes + if ($GLOBALS['meta']['adresse_neuf'] AND $GLOBALS['meta']['jours_neuf'] + AND ($GLOBALS['meta']['quoi_de_neuf'] == 'oui')) + $taches_generales['mail']= 3600 * 24 * $GLOBALS['meta']['jours_neuf']; + + // stats : toutes les 5 minutes on peut vider un panier de visites + if ($GLOBALS['meta']["activer_statistiques"] == "oui") { + $taches_generales['visites'] = 300; + $taches_generales['popularites'] = 7200; # calcul lourd + } + + // syndication + if ($GLOBALS['meta']["activer_syndic"] == "oui") + $taches_generales['syndic'] = 90; + + // maintenance (ajax, verifications diverses) + $taches_generales['maintenance'] = 3600 * 2; + + // verifier si une mise a jour de spip est disponible (2 fois par semaine suffit largement) + $taches_generales['mise_a_jour'] = 3*24*3600; + + return pipeline('taches_generales_cron',$taches_generales); +} + +// Pas de fichier a part pour une fonction aussi petite: +// - elle peut retirer les fichiers perimes +// - elle fait appliquer le quota +// En cas de quota sur le CACHE/, nettoyer les fichiers les plus vieux +// http://doc.spip.org/@genie_invalideur_dist +function genie_invalideur_dist($t) { + + include_spip('inc/invalideur'); + $encore = appliquer_quota_cache(); + + // si le cache est trop gonfle, redemander la main pour poursuivre + if ($encore) + return (0 - $t); + return 1; +} +?>