{"id":1133,"date":"2010-03-01T13:30:44","date_gmt":"2010-03-01T12:30:44","guid":{"rendered":"http:\/\/blogs.wittwer.fr\/whiler\/?p=1133"},"modified":"2012-03-02T04:25:09","modified_gmt":"2012-03-02T03:25:09","slug":"log-coupures-web","status":"publish","type":"post","link":"https:\/\/blogs.wittwer.fr\/whiler\/2010\/03\/01\/log-coupures-web\/","title":{"rendered":"Journalisation des coupures web\u2026"},"content":{"rendered":"<p>Suite \u00e0 <a href=\"\/whiler\/2010\/02\/15\/free-tout-compris\/\">mes probl\u00e8mes li\u00e9s \u00e0 Free<\/a>, j&rsquo;ai d\u00e9cid\u00e9 de me faire une petite application <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Delphi_(informatique)\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: Delphi\" style=\"\" >Delphi<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup> pour <em>logger<\/em> mes coupures&#8230; cela permettra d&rsquo;investiguer de fa\u00e7on plus fine&#8230;<\/p>\n<p>Le principe est simple&nbsp;:<\/p>\n<ul>\n<li>Cr\u00e9er un <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Daemon\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: Service Windows\" style=\"\" >Service Windows<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup> qui se lance au d\u00e9marrage d&rsquo;une machine qui est toujours allum\u00e9e&#8230;<\/li>\n<li>V\u00e9rifier \u00e0 intervalles r\u00e9guliers si la connexion est disponible&nbsp;:<\/li>\n<li>Toutes les 5 minutes, je <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Ping_(logiciel)\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: pingue\" style=\"\" >pingue<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup> free.fr et je stocke le r\u00e9sultat dans un fichier journalier (\u00e7a marche ou pas).<\/li>\n<li>Si cela ne marche pas, je v\u00e9rifie alors toutes les 15 secondes&#8230;<\/li>\n<li>D\u00e8s que cela remarche au bout d&rsquo;une dizaine de fois, je repasse \u00e0 un intervalle de 5 minutes&#8230;<\/li>\n<li>Utiliser les fichiers g\u00e9n\u00e9r\u00e9s avec un <a href=\"http:\/\/fr.wikipedia.org\/wiki\/tableur\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: tableur\" style=\"\" >tableur<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup>, type <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Excel\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: Excel\" style=\"\" >Excel<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup> pour tracer les heures de disponibilit\u00e9\/indisponibilit\u00e9&nbsp;!<\/li>\n<\/ul>\n<p>Pour ceux que cela int\u00e9resse, le code est ci-dessous&#8230;<br \/>\nJ&rsquo;ai simplement cr\u00e9\u00e9 un nouveau projet <strong>application Service<\/strong>, dans lequel j&rsquo;ai ajout\u00e9 2 composants&nbsp;:<\/p>\n<ul>\n<li>1 <strong>TTimer<\/strong> pour v\u00e9rifier r\u00e9guli\u00e8rement et pas coder mon propre <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Thread_(informatique)\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: thread\" style=\"\" >thread<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup>&#8230;<\/li>\n<li>1 <strong>TIdIcmpClient<\/strong> pour <em>pinguer<\/em> le serveur de Free&#8230;<\/li>\n<\/ul>\n<p><!--more--><\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/>101<br \/>102<br \/>103<br \/>104<br \/>105<br \/>106<br \/>107<br \/>108<br \/>109<br \/>110<br \/>111<br \/>112<br \/>113<br \/>114<br \/>115<br \/>116<br \/>117<br \/>118<br \/>119<br \/>120<br \/>121<br \/>122<br \/>123<br \/>124<br \/>125<br \/>126<br \/>127<br \/>128<br \/>129<br \/>130<br \/>131<br \/>132<br \/>133<br \/>134<br \/>135<br \/>136<br \/>137<br \/>138<br \/>139<br \/>140<br \/>141<br \/>142<br \/>143<br \/>144<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">unit<\/span> main<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">interface<\/span><br \/>\n<br \/>\n<span class=\"kw1\">uses<\/span><br \/>\nWindows<span class=\"sy1\">,<\/span> Messages<span class=\"sy1\">,<\/span> SysUtils<span class=\"sy1\">,<\/span> Classes<span class=\"sy1\">,<\/span> Graphics<span class=\"sy1\">,<\/span> Controls<span class=\"sy1\">,<\/span> SvcMgr<span class=\"sy1\">,<\/span> Dialogs<span class=\"sy1\">,<\/span><br \/>\nExtCtrls<span class=\"sy1\">,<\/span> IdBaseComponent<span class=\"sy1\">,<\/span> IdComponent<span class=\"sy1\">,<\/span> IdRawBase<span class=\"sy1\">,<\/span> IdRawClient<span class=\"sy1\">,<\/span> IdIcmpClient<span class=\"sy1\">,<\/span><br \/>\nStrUtils<span class=\"sy1\">,<\/span> DateUtils<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">const<\/span><br \/>\nLONG_INTERVAL &nbsp;<span class=\"sy3\">=<\/span> <span class=\"nu0\">300000<\/span><span class=\"sy1\">;<\/span><br \/>\nSHORT_INTERVAL <span class=\"sy3\">=<\/span> &nbsp;<span class=\"nu0\">15000<\/span><span class=\"sy1\">;<\/span><br \/>\nSHORT_RETRY &nbsp; &nbsp;<span class=\"sy3\">=<\/span> &nbsp; &nbsp; <span class=\"nu0\">10<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">type<\/span><br \/>\nTConnectionLoggerService <span class=\"sy3\">=<\/span> <span class=\"kw1\">class<\/span><span class=\"br0\">&#40;<\/span>TService<span class=\"br0\">&#41;<\/span><br \/>\ntmrCheck<span class=\"sy1\">:<\/span> TTimer<span class=\"sy1\">;<\/span><br \/>\nidcmpclntPinger<span class=\"sy1\">:<\/span> TIdIcmpClient<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">procedure<\/span> ServiceExecute<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> TService<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">procedure<\/span> tmrCheckTimer<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">procedure<\/span> ServicePause<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> TService<span class=\"sy1\">;<\/span> <span class=\"kw1\">var<\/span> Paused<span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">procedure<\/span> ServiceContinue<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> TService<span class=\"sy1\">;<\/span> <span class=\"kw1\">var<\/span> Continued<span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">private<\/span><br \/>\n<span class=\"coMULTI\">{ D\u00e9clarations priv\u00e9es }<\/span><br \/>\niSpeedRetry<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\nsFileName<span class=\"sy1\">:<\/span> &nbsp; <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\nfPointer<span class=\"sy1\">:<\/span> &nbsp; &nbsp;<span class=\"kw4\">TextFile<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">procedure<\/span> WriteIt<span class=\"br0\">&#40;<\/span>sToWrite<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">function<\/span> &nbsp;Ping<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">function<\/span> &nbsp;AddLeadingZeroes<span class=\"br0\">&#40;<\/span><span class=\"kw1\">const<\/span> iNumber<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span> iLength<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span> <span class=\"sy3\">=<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">function<\/span> &nbsp;CheckIt<span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">public<\/span><br \/>\n<span class=\"kw1\">function<\/span> GetServiceController<span class=\"sy1\">:<\/span> TServiceController<span class=\"sy1\">;<\/span> <span class=\"kw1\">override<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"coMULTI\">{ D\u00e9clarations publiques }<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">var<\/span><br \/>\nConnectionLoggerService<span class=\"sy1\">:<\/span> TConnectionLoggerService<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">implementation<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$R *.DFM}<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> ServiceController<span class=\"br0\">&#40;<\/span>CtrlCode<span class=\"sy1\">:<\/span> <span class=\"kw4\">DWord<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span> <span class=\"kw1\">stdcall<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\nConnectionLoggerService<span class=\"sy1\">.<\/span><span class=\"me1\">Controller<\/span><span class=\"br0\">&#40;<\/span>CtrlCode<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">function<\/span> TConnectionLoggerService<span class=\"sy1\">.<\/span><span class=\"me1\">AddLeadingZeroes<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">const<\/span> iNumber<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\niLength<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\nResult <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> SysUtils<span class=\"sy1\">.<\/span><span class=\"kw3\">Format<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'%.*d'<\/span><span class=\"sy1\">,<\/span> <span class=\"br0\">&#91;<\/span>iLength<span class=\"sy1\">,<\/span> iNumber<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">function<\/span> TConnectionLoggerService<span class=\"sy1\">.<\/span><span class=\"me1\">CheckIt<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\nResult <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> Ping<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>Result<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n<span class=\"kw3\">Dec<\/span><span class=\"br0\">&#40;<\/span>iSpeedRetry<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>iSpeedRetry <span class=\"sy3\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\ntmrCheck<span class=\"sy1\">.<\/span><span class=\"me1\">Interval<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> LONG_INTERVAL<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><br \/>\n<span class=\"kw1\">else<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\niSpeedRetry &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> SHORT_RETRY<span class=\"sy1\">;<\/span><br \/>\ntmrCheck<span class=\"sy1\">.<\/span><span class=\"me1\">Interval<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> SHORT_INTERVAL<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\nWriteIt<span class=\"br0\">&#40;<\/span><span class=\"kw3\">DateTimeToStr<\/span><span class=\"br0\">&#40;<\/span>Now<span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">';'<\/span> <span class=\"sy3\">+<\/span> IfThen<span class=\"br0\">&#40;<\/span>Result<span class=\"sy1\">,<\/span> <span class=\"st0\">'1'<\/span><span class=\"sy1\">,<\/span> <span class=\"st0\">'0'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">function<\/span> TConnectionLoggerService<span class=\"sy1\">.<\/span><span class=\"me1\">GetServiceController<\/span><span class=\"sy1\">:<\/span> TServiceController<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\nResult <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> ServiceController<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">function<\/span> TConnectionLoggerService<span class=\"sy1\">.<\/span><span class=\"me1\">Ping<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\nResult <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">with<\/span> idcmpclntPinger <span class=\"kw1\">do<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n<span class=\"kw1\">try<\/span><br \/>\nPing<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">except<\/span><br \/>\nResult <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><span class=\"sy1\">;<\/span><br \/>\nExit<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>ReplyStatus<span class=\"sy1\">.<\/span><span class=\"me1\">ReplyStatusType<\/span> &amp;lt<span class=\"sy1\">;<\/span>&amp;gt<span class=\"sy1\">;<\/span> rsEcho<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\nResult <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><span class=\"sy1\">;<\/span> <span class=\"co1\">\/\/pas d'\u00e9cho, on renvoi false.<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TConnectionLoggerService<span class=\"sy1\">.<\/span><span class=\"me1\">ServiceContinue<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> TService<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span> Continued<span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\ntmrCheck<span class=\"sy1\">.<\/span><span class=\"me1\">Enabled<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\nWriteIt<span class=\"br0\">&#40;<\/span><span class=\"st0\">'Restarted @ '<\/span> <span class=\"sy3\">+<\/span> <span class=\"kw3\">DateTimeToStr<\/span><span class=\"br0\">&#40;<\/span>Now<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\nContinued <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TConnectionLoggerService<span class=\"sy1\">.<\/span><span class=\"me1\">ServiceExecute<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> TService<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\nsFileName <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">ExtractFilePath<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">ParamStr<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">'ConnectionLogger-'<\/span> <span class=\"sy3\">+<\/span> <span class=\"kw3\">IntToStr<\/span><span class=\"br0\">&#40;<\/span>YearOf<span class=\"br0\">&#40;<\/span>Now<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">'-'<\/span> <span class=\"sy3\">+<\/span> AddLeadingZeroes<span class=\"br0\">&#40;<\/span>MonthOf<span class=\"br0\">&#40;<\/span>Now<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">'-'<\/span> <span class=\"sy3\">+<\/span> AddLeadingZeroes<span class=\"br0\">&#40;<\/span>DayOf<span class=\"br0\">&#40;<\/span>Now<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">'.log'<\/span><span class=\"sy1\">;<\/span><br \/>\nWriteIt<span class=\"br0\">&#40;<\/span><span class=\"st0\">'Started @ '<\/span> <span class=\"sy3\">+<\/span> <span class=\"kw3\">DateTimeToStr<\/span><span class=\"br0\">&#40;<\/span>Now<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\ntmrCheck<span class=\"sy1\">.<\/span><span class=\"me1\">Interval<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> LONG_INTERVAL<span class=\"sy1\">;<\/span><br \/>\n<span class=\"co1\">\/\/ On v\u00e9rifie au d\u00e9marrage<\/span><br \/>\nCheckIt<span class=\"sy1\">;<\/span><br \/>\n<span class=\"co1\">\/\/ On rev\u00e9rifiera \u00e0 intervalles r\u00e9guliers<\/span><br \/>\ntmrCheck<span class=\"sy1\">.<\/span><span class=\"me1\">Enabled<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">while<\/span> <span class=\"kw1\">not<\/span> Terminated <span class=\"kw1\">do<\/span><br \/>\nServiceThread<span class=\"sy1\">.<\/span><span class=\"me1\">ProcessRequests<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">True<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><span class=\"co1\">\/\/ wait for termination<\/span><br \/>\n<br \/>\nWriteIt<span class=\"br0\">&#40;<\/span><span class=\"st0\">'Stopped @ '<\/span> <span class=\"sy3\">+<\/span> <span class=\"kw3\">DateTimeToStr<\/span><span class=\"br0\">&#40;<\/span>Now<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\ntmrCheck<span class=\"sy1\">.<\/span><span class=\"me1\">Enabled<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TConnectionLoggerService<span class=\"sy1\">.<\/span><span class=\"me1\">ServicePause<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> TService<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span> Paused<span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\ntmrCheck<span class=\"sy1\">.<\/span><span class=\"me1\">Enabled<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><span class=\"sy1\">;<\/span><br \/>\nWriteIt<span class=\"br0\">&#40;<\/span><span class=\"st0\">'Paused @ '<\/span> <span class=\"sy3\">+<\/span> <span class=\"kw3\">DateTimeToStr<\/span><span class=\"br0\">&#40;<\/span>Now<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\nPaused <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TConnectionLoggerService<span class=\"sy1\">.<\/span><span class=\"me1\">tmrCheckTimer<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\nCheckIt<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TConnectionLoggerService<span class=\"sy1\">.<\/span><span class=\"me1\">WriteIt<\/span><span class=\"br0\">&#40;<\/span>sToWrite<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n<span class=\"kw3\">AssignFile<\/span><span class=\"br0\">&#40;<\/span>fPointer<span class=\"sy1\">,<\/span> sFileName<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"kw3\">FileExists<\/span><span class=\"br0\">&#40;<\/span>sFileName<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n<span class=\"kw3\">Append<\/span><span class=\"br0\">&#40;<\/span>fPointer<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"kw1\">else<\/span><br \/>\n<span class=\"kw3\">Rewrite<\/span><span class=\"br0\">&#40;<\/span>fPointer<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw3\">Writeln<\/span><span class=\"br0\">&#40;<\/span>fPointer<span class=\"sy1\">,<\/span> sToWrite<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw3\">CloseFile<\/span><span class=\"br0\">&#40;<\/span>fPointer<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">.<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>J&rsquo;l&rsquo;ai impl\u00e9ment\u00e9 pendant ma pause-d\u00e9jeuner.. Merci d&rsquo;\u00eatre tol\u00e9rant  <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/dull.gif\" alt=\"|-(\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><br \/>\nAttention, sous <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Microsoft_Windows_Vista\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: Vista\" style=\"\" >Vista<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup>, pour installer le service, il faut \u00eatre administrateur (\u00e9l\u00e9vation des droits)&#8230; Personnellement, j&rsquo;ai ouvert une console DOS en tant qu&rsquo;administrateur, et j&rsquo;ai install\u00e9 le service (<em>ConnectionLogger.exe \/install<\/em>)&#8230;<\/p>\n<p>Il ne me reste plus qu&rsquo;\u00e0 attendre une semaine ou deux pour avoir suffisamment de donn\u00e9es \u00e0 comparer&#8230;  <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/worry.gif\" alt=\":s\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><br \/>\n<font size=\"-2\">Si \u00e0 tout hasard, vous souhaiteriez la version binaire pour l&rsquo;utiliser chez vous&#8230; vous pouvez poster un commentaire&#8230;<\/font><\/p>\n<div class=\"thanks_button_div\" \n                  style=\"float: right; margin-right: 10px; margin-top:10px;\"><div id=\"thanksButtonDiv_1133_1\" style=\"background-image:url(https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/plugins\/thanks-you-counter-button\/images\/thanks_compact_brown1.png); background-repeat:no-repeat; float: left; display: inline;\"\n                onmouseover=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_1133_1', true);\" \n                onmouseout=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_1133_1', false);\"\n                onclick=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_1133_1', false);\" >\n                <input type=\"button\" onclick=\"thankYouButtonClick(1133, 'You left &ldquo;Thanks&rdquo; already for this post')\" value=\"Merci\u00a0 0\"\n                  class=\"thanks_button thanks_compact thanks_brown1\"\n                  style=\"  font-family: Verdana, Arial, Sans-Serif; font-size: 14px; font-weight: normal;; color:#00f;\"\n                  id=\"thanksButton_1133_1\" title=\"Click to leave &ldquo;Thanks&rdquo; for this post\"\/>\n             <\/div><div id=\"ajax_loader_1133_1\" style=\"display:inline;visibility: hidden;\"><img decoding=\"async\" alt=\"ajax loader\" src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/plugins\/thanks-you-counter-button\/images\/ajax-loader.gif\" \/><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Suite \u00e0 mes probl\u00e8mes li\u00e9s \u00e0 Free, j\u2019ai d\u00e9cid\u00e9 de me faire une petite application Delphi pour logger mes coupures\u2026 cela permettra d\u2019investiguer de fa\u00e7on plus fine\u2026<br \/>\nLe principe est simple :<br \/>\n    * Cr\u00e9er un Service WindowsW qui se lance au d\u00e9marrage d\u2019une machine qui est toujours allum\u00e9e\u2026<br \/>\n    * V\u00e9rifier \u00e0 intervalles r\u00e9guliers si la connexion est disponible :<br \/>\n    * Toutes les 5 minutes, je pingueW free.fr et je stocke le r\u00e9sultat dans un fichier journalier (\u00e7a marche ou pas).<br \/>\n    * Si cela ne marche pas, je v\u00e9rifie alors toutes les 15 secondes\u2026<br \/>\n    * D\u00e8s que cela remarche au bout d\u2019une dizaine de fois, je repasse \u00e0 un intervalle de 5 minutes\u2026<br \/>\n    * Utiliser les fichiers g\u00e9n\u00e9r\u00e9s avec un tableurW, type ExcelW pour tracer les heures de disponibilit\u00e9\/indisponibilit\u00e9 !<br \/>\n&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[7,6,11],"tags":[27,154,131,108,73,126],"class_list":["post-1133","post","type-post","status-publish","format-standard","hentry","category-delphi","category-dev","category-web","tag-coloration-syntaxique","tag-delphi","tag-free","tag-script","tag-services-msc","tag-vista"],"_links":{"self":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/1133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/comments?post=1133"}],"version-history":[{"count":0,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/1133\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media?parent=1133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/categories?post=1133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/tags?post=1133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}