From b51ec4a83fa5311aefc5c05f2579a5748b355e84 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 4 Nov 2016 00:01:36 +0100 Subject: [PATCH] =?UTF-8?q?merge=20rapport=20et=20am=C3=A9lioration=20scri?= =?UTF-8?q?pt=5Fsimple?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rapport projet/LogoUEVE.png | Bin Rapport projet/arborescence_fichiers_IHM.jpg | Bin Rapport projet/check_etatnoeud.png | Bin Rapport projet/conversion_ui_py.jpg | Bin Rapport projet/engrenage.jpg | Bin Rapport projet/exemple_signal_slot.png | Bin Rapport projet/fen_etat_noeud.png | Bin Rapport projet/fenetre_principale.png | Bin Rapport projet/from_clustershell.png | Bin 0 -> 4300 bytes Rapport projet/logo_fichier_python.png | Bin Rapport projet/messagebox.png | Bin Rapport projet/photo_ui.png | Bin Rapport projet/rapport.aux | 117 +- Rapport projet/rapport.dvi | Bin 0 -> 32444 bytes Rapport projet/rapport.log | 1861 ++++++++--------- Rapport projet/rapport.out | 39 +- Rapport projet/rapport.pdf | Bin 311006 -> 300358 bytes Rapport projet/rapport.synctex.gz | Bin 34857 -> 42682 bytes Rapport projet/rapport.tex | 74 +- Rapport projet/rapport.toc | 41 +- Rapport projet/signal_slot.jpg | Bin Script_conf/example.yaml | 0 Script_conf/supply.py | 118 +- Script_conf/supply.pyc | Bin 1891 -> 1951 bytes Script_conf/yamlscript.py | 432 ++-- Script_simple/script.py | 73 +- clustershell_IHM/.cluster.py.swo | Bin clustershell_IHM/.cluster.py.swp | Bin clustershell_IHM/IHM.py | 544 ++--- clustershell_IHM/IHM.pyc | Bin clustershell_IHM/check_noeud.py | 18 +- clustershell_IHM/check_noeud.pyc | Bin 212 -> 215 bytes clustershell_IHM/cluster.py | 532 ++--- clustershell_IHM/cluster.pyc | Bin 9864 -> 9912 bytes clustershell_IHM/clustershell_IHM.pro | 0 clustershell_IHM/clustershell_IHM.pro.user | 0 .../clustershell_IHM.pro.user.79e2c7c | 0 clustershell_IHM/clustershell_IHM.py | 0 clustershell_IHM/clustershell_IHM.pyc | Bin 4239 -> 4260 bytes clustershell_IHM/clustershell_IHM.ui | 0 clustershell_IHM/configuration_IHM.py | 0 clustershell_IHM/configuration_IHM.pyc | Bin 3788 -> 3809 bytes clustershell_IHM/configuration_IHM.ui | 0 clustershell_IHM/etatnoeud_IHM.py | 0 clustershell_IHM/etatnoeud_IHM.pyc | Bin 5223 -> 5244 bytes clustershell_IHM/etatnoeud_IHM.ui | 0 clustershell_IHM/toto.yaml | 0 example.yaml | 0 48 files changed, 1916 insertions(+), 1933 deletions(-) mode change 100644 => 100755 Rapport projet/LogoUEVE.png mode change 100644 => 100755 Rapport projet/arborescence_fichiers_IHM.jpg mode change 100644 => 100755 Rapport projet/check_etatnoeud.png mode change 100644 => 100755 Rapport projet/conversion_ui_py.jpg mode change 100644 => 100755 Rapport projet/engrenage.jpg mode change 100644 => 100755 Rapport projet/exemple_signal_slot.png mode change 100644 => 100755 Rapport projet/fen_etat_noeud.png mode change 100644 => 100755 Rapport projet/fenetre_principale.png create mode 100644 Rapport projet/from_clustershell.png mode change 100644 => 100755 Rapport projet/logo_fichier_python.png mode change 100644 => 100755 Rapport projet/messagebox.png mode change 100644 => 100755 Rapport projet/photo_ui.png mode change 100644 => 100755 Rapport projet/rapport.aux create mode 100644 Rapport projet/rapport.dvi mode change 100644 => 100755 Rapport projet/rapport.log mode change 100644 => 100755 Rapport projet/rapport.out mode change 100644 => 100755 Rapport projet/rapport.pdf mode change 100644 => 100755 Rapport projet/rapport.tex mode change 100644 => 100755 Rapport projet/rapport.toc mode change 100644 => 100755 Rapport projet/signal_slot.jpg mode change 100644 => 100755 Script_conf/example.yaml mode change 100644 => 100755 Script_conf/supply.py mode change 100644 => 100755 Script_conf/yamlscript.py mode change 100644 => 100755 Script_simple/script.py mode change 100644 => 100755 clustershell_IHM/.cluster.py.swo mode change 100644 => 100755 clustershell_IHM/.cluster.py.swp mode change 100644 => 100755 clustershell_IHM/IHM.py mode change 100644 => 100755 clustershell_IHM/IHM.pyc mode change 100644 => 100755 clustershell_IHM/check_noeud.py mode change 100644 => 100755 clustershell_IHM/cluster.py mode change 100644 => 100755 clustershell_IHM/clustershell_IHM.pro mode change 100644 => 100755 clustershell_IHM/clustershell_IHM.pro.user mode change 100644 => 100755 clustershell_IHM/clustershell_IHM.pro.user.79e2c7c mode change 100644 => 100755 clustershell_IHM/clustershell_IHM.py mode change 100644 => 100755 clustershell_IHM/clustershell_IHM.ui mode change 100644 => 100755 clustershell_IHM/configuration_IHM.py mode change 100644 => 100755 clustershell_IHM/configuration_IHM.ui mode change 100644 => 100755 clustershell_IHM/etatnoeud_IHM.py mode change 100644 => 100755 clustershell_IHM/etatnoeud_IHM.ui mode change 100644 => 100755 clustershell_IHM/toto.yaml mode change 100644 => 100755 example.yaml diff --git a/Rapport projet/LogoUEVE.png b/Rapport projet/LogoUEVE.png old mode 100644 new mode 100755 diff --git a/Rapport projet/arborescence_fichiers_IHM.jpg b/Rapport projet/arborescence_fichiers_IHM.jpg old mode 100644 new mode 100755 diff --git a/Rapport projet/check_etatnoeud.png b/Rapport projet/check_etatnoeud.png old mode 100644 new mode 100755 diff --git a/Rapport projet/conversion_ui_py.jpg b/Rapport projet/conversion_ui_py.jpg old mode 100644 new mode 100755 diff --git a/Rapport projet/engrenage.jpg b/Rapport projet/engrenage.jpg old mode 100644 new mode 100755 diff --git a/Rapport projet/exemple_signal_slot.png b/Rapport projet/exemple_signal_slot.png old mode 100644 new mode 100755 diff --git a/Rapport projet/fen_etat_noeud.png b/Rapport projet/fen_etat_noeud.png old mode 100644 new mode 100755 diff --git a/Rapport projet/fenetre_principale.png b/Rapport projet/fenetre_principale.png old mode 100644 new mode 100755 diff --git a/Rapport projet/from_clustershell.png b/Rapport projet/from_clustershell.png new file mode 100644 index 0000000000000000000000000000000000000000..66432fe7c4a7c71d7784c7ec4e21fb53e526859b GIT binary patch literal 4300 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 R@a=H_6$;%mw&?r#`d{a<&y)ZF literal 0 HcmV?d00001 diff --git a/Rapport projet/rapport.log b/Rapport projet/rapport.log old mode 100644 new mode 100755 index 41c9425..49ba666 --- a/Rapport projet/rapport.log +++ b/Rapport projet/rapport.log @@ -1,976 +1,885 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.17 (MiKTeX 2.9) (preloaded format=pdflatex 2016.9.25) 3 NOV 2016 20:59 -entering extended mode -**./rapport.tex -(rapport.tex -LaTeX2e <2016/03/31> patch level 3 -Babel <3.9r> and hyphenation patterns for 75 language(s) loaded. -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\article.cls" -Document Class: article 2014/09/29 v1.4h Standard LaTeX document class -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\size11.clo" -File: size11.clo 2014/09/29 v1.4h Standard LaTeX file (size option) -) -\c@part=\count79 -\c@section=\count80 -\c@subsection=\count81 -\c@subsubsection=\count82 -\c@paragraph=\count83 -\c@subparagraph=\count84 -\c@figure=\count85 -\c@table=\count86 -\abovecaptionskip=\skip41 -\belowcaptionskip=\skip42 -\bibindent=\dimen102 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\babel\babel.sty" -Package: babel 2016/04/23 3.9r The Babel package - -************************************* -* Local config file bblopts.cfg used -* -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\arabi\bblopts.cfg" -File: bblopts.cfg 2005/09/08 v0.1 add Arabic and Farsi to "declared" options of - babel -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\babel-french\frenchb.ldf" -Language: frenchb 2016/05/14 v3.2c French support from the babel system - -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\babel\babel.def" -File: babel.def 2016/04/23 3.9r Babel common definitions -\babel@savecnt=\count87 -\U@D=\dimen103 -) -\l@acadian = a dialect from \language\l@french -\l@canadien = a dialect from \language\l@french -\FB@nonchar=\count88 -\FBcolonskip=\skip43 -\FBthinskip=\skip44 -Package babel Info: Making : an active character on input line 365. -Package babel Info: Making ; an active character on input line 366. -Package babel Info: Making ! an active character on input line 367. -Package babel Info: Making ? an active character on input line 368. -\FBguillskip=\skip45 -\FBguill@level=\count89 -\FB@everypar=\toks14 -\FB@Mht=\dimen104 -\std@mcc=\count90 -\dec@mcc=\count91 -\listindentFB=\skip46 -\labelwidthFB=\skip47 -\leftmarginFB=\skip48 -\parindentFFN=\dimen105 -\FBfnindent=\skip49 -)) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\carlisle\scalefnt.sty") -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics\keyval.sty" -Package: keyval 2014/10/28 v1.15 key=value parser (DPC) -\KV@toks@=\toks15 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\inputenc.sty" -Package: inputenc 2015/03/17 v1.2c Input encoding file -\inpenc@prehook=\toks16 -\inpenc@posthook=\toks17 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\utf8.def" -File: utf8.def 2016/02/28 v1.1s UTF-8 support for inputenc -Now handling font encoding OML ... -... no UTF-8 mapping file for font encoding OML -Now handling font encoding T1 ... -... processing UTF-8 mapping file for font encoding T1 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\t1enc.dfu" -File: t1enc.dfu 2016/02/28 v1.1s UTF-8 support for inputenc - defining Unicode char U+00A0 (decimal 160) - defining Unicode char U+00A1 (decimal 161) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00AB (decimal 171) - defining Unicode char U+00AD (decimal 173) - defining Unicode char U+00BB (decimal 187) - defining Unicode char U+00BF (decimal 191) - defining Unicode char U+00C0 (decimal 192) - defining Unicode char U+00C1 (decimal 193) - defining Unicode char U+00C2 (decimal 194) - defining Unicode char U+00C3 (decimal 195) - defining Unicode char U+00C4 (decimal 196) - defining Unicode char U+00C5 (decimal 197) - defining Unicode char U+00C6 (decimal 198) - defining Unicode char U+00C7 (decimal 199) - defining Unicode char U+00C8 (decimal 200) - defining Unicode char U+00C9 (decimal 201) - defining Unicode char U+00CA (decimal 202) - defining Unicode char U+00CB (decimal 203) - defining Unicode char U+00CC (decimal 204) - defining Unicode char U+00CD (decimal 205) - defining Unicode char U+00CE (decimal 206) - defining Unicode char U+00CF (decimal 207) - defining Unicode char U+00D0 (decimal 208) - defining Unicode char U+00D1 (decimal 209) - defining Unicode char U+00D2 (decimal 210) - defining Unicode char U+00D3 (decimal 211) - defining Unicode char U+00D4 (decimal 212) - defining Unicode char U+00D5 (decimal 213) - defining Unicode char U+00D6 (decimal 214) - defining Unicode char U+00D8 (decimal 216) - defining Unicode char U+00D9 (decimal 217) - defining Unicode char U+00DA (decimal 218) - defining Unicode char U+00DB (decimal 219) - defining Unicode char U+00DC (decimal 220) - defining Unicode char U+00DD (decimal 221) - defining Unicode char U+00DE (decimal 222) - defining Unicode char U+00DF (decimal 223) - defining Unicode char U+00E0 (decimal 224) - defining Unicode char U+00E1 (decimal 225) - defining Unicode char U+00E2 (decimal 226) - defining Unicode char U+00E3 (decimal 227) - defining Unicode char U+00E4 (decimal 228) - defining Unicode char U+00E5 (decimal 229) - defining Unicode char U+00E6 (decimal 230) - defining Unicode char U+00E7 (decimal 231) - defining Unicode char U+00E8 (decimal 232) - defining Unicode char U+00E9 (decimal 233) - defining Unicode char U+00EA (decimal 234) - defining Unicode char U+00EB (decimal 235) - defining Unicode char U+00EC (decimal 236) - defining Unicode char U+00ED (decimal 237) - defining Unicode char U+00EE (decimal 238) - defining Unicode char U+00EF (decimal 239) - defining Unicode char U+00F0 (decimal 240) - defining Unicode char U+00F1 (decimal 241) - defining Unicode char U+00F2 (decimal 242) - defining Unicode char U+00F3 (decimal 243) - defining Unicode char U+00F4 (decimal 244) - defining Unicode char U+00F5 (decimal 245) - defining Unicode char U+00F6 (decimal 246) - defining Unicode char U+00F8 (decimal 248) - defining Unicode char U+00F9 (decimal 249) - defining Unicode char U+00FA (decimal 250) - defining Unicode char U+00FB (decimal 251) - defining Unicode char U+00FC (decimal 252) - defining Unicode char U+00FD (decimal 253) - defining Unicode char U+00FE (decimal 254) - defining Unicode char U+00FF (decimal 255) - defining Unicode char U+0100 (decimal 256) - defining Unicode char U+0101 (decimal 257) - defining Unicode char U+0102 (decimal 258) - defining Unicode char U+0103 (decimal 259) - defining Unicode char U+0104 (decimal 260) - defining Unicode char U+0105 (decimal 261) - defining Unicode char U+0106 (decimal 262) - defining Unicode char U+0107 (decimal 263) - defining Unicode char U+0108 (decimal 264) - defining Unicode char U+0109 (decimal 265) - defining Unicode char U+010A (decimal 266) - defining Unicode char U+010B (decimal 267) - defining Unicode char U+010C (decimal 268) - defining Unicode char U+010D (decimal 269) - defining Unicode char U+010E (decimal 270) - defining Unicode char U+010F (decimal 271) - defining Unicode char U+0110 (decimal 272) - defining Unicode char U+0111 (decimal 273) - defining Unicode char U+0112 (decimal 274) - defining Unicode char U+0113 (decimal 275) - defining Unicode char U+0114 (decimal 276) - defining Unicode char U+0115 (decimal 277) - defining Unicode char U+0116 (decimal 278) - defining Unicode char U+0117 (decimal 279) - defining Unicode char U+0118 (decimal 280) - defining Unicode char U+0119 (decimal 281) - defining Unicode char U+011A (decimal 282) - defining Unicode char U+011B (decimal 283) - defining Unicode char U+011C (decimal 284) - defining Unicode char U+011D (decimal 285) - defining Unicode char U+011E (decimal 286) - defining Unicode char U+011F (decimal 287) - defining Unicode char U+0120 (decimal 288) - defining Unicode char U+0121 (decimal 289) - defining Unicode char U+0122 (decimal 290) - defining Unicode char U+0123 (decimal 291) - defining Unicode char U+0124 (decimal 292) - defining Unicode char U+0125 (decimal 293) - defining Unicode char U+0128 (decimal 296) - defining Unicode char U+0129 (decimal 297) - defining Unicode char U+012A (decimal 298) - defining Unicode char U+012B (decimal 299) - defining Unicode char U+012C (decimal 300) - defining Unicode char U+012D (decimal 301) - defining Unicode char U+012E (decimal 302) - defining Unicode char U+012F (decimal 303) - defining Unicode char U+0130 (decimal 304) - defining Unicode char U+0131 (decimal 305) - defining Unicode char U+0132 (decimal 306) - defining Unicode char U+0133 (decimal 307) - defining Unicode char U+0134 (decimal 308) - defining Unicode char U+0135 (decimal 309) - defining Unicode char U+0136 (decimal 310) - defining Unicode char U+0137 (decimal 311) - defining Unicode char U+0139 (decimal 313) - defining Unicode char U+013A (decimal 314) - defining Unicode char U+013B (decimal 315) - defining Unicode char U+013C (decimal 316) - defining Unicode char U+013D (decimal 317) - defining Unicode char U+013E (decimal 318) - defining Unicode char U+0141 (decimal 321) - defining Unicode char U+0142 (decimal 322) - defining Unicode char U+0143 (decimal 323) - defining Unicode char U+0144 (decimal 324) - defining Unicode char U+0145 (decimal 325) - defining Unicode char U+0146 (decimal 326) - defining Unicode char U+0147 (decimal 327) - defining Unicode char U+0148 (decimal 328) - defining Unicode char U+014A (decimal 330) - defining Unicode char U+014B (decimal 331) - defining Unicode char U+014C (decimal 332) - defining Unicode char U+014D (decimal 333) - defining Unicode char U+014E (decimal 334) - defining Unicode char U+014F (decimal 335) - defining Unicode char U+0150 (decimal 336) - defining Unicode char U+0151 (decimal 337) - defining Unicode char U+0152 (decimal 338) - defining Unicode char U+0153 (decimal 339) - defining Unicode char U+0154 (decimal 340) - defining Unicode char U+0155 (decimal 341) - defining Unicode char U+0156 (decimal 342) - defining Unicode char U+0157 (decimal 343) - defining Unicode char U+0158 (decimal 344) - defining Unicode char U+0159 (decimal 345) - defining Unicode char U+015A (decimal 346) - defining Unicode char U+015B (decimal 347) - defining Unicode char U+015C (decimal 348) - defining Unicode char U+015D (decimal 349) - defining Unicode char U+015E (decimal 350) - defining Unicode char U+015F (decimal 351) - defining Unicode char U+0160 (decimal 352) - defining Unicode char U+0161 (decimal 353) - defining Unicode char U+0162 (decimal 354) - defining Unicode char U+0163 (decimal 355) - defining Unicode char U+0164 (decimal 356) - defining Unicode char U+0165 (decimal 357) - defining Unicode char U+0168 (decimal 360) - defining Unicode char U+0169 (decimal 361) - defining Unicode char U+016A (decimal 362) - defining Unicode char U+016B (decimal 363) - defining Unicode char U+016C (decimal 364) - defining Unicode char U+016D (decimal 365) - defining Unicode char U+016E (decimal 366) - defining Unicode char U+016F (decimal 367) - defining Unicode char U+0170 (decimal 368) - defining Unicode char U+0171 (decimal 369) - defining Unicode char U+0172 (decimal 370) - defining Unicode char U+0173 (decimal 371) - defining Unicode char U+0174 (decimal 372) - defining Unicode char U+0175 (decimal 373) - defining Unicode char U+0176 (decimal 374) - defining Unicode char U+0177 (decimal 375) - defining Unicode char U+0178 (decimal 376) - defining Unicode char U+0179 (decimal 377) - defining Unicode char U+017A (decimal 378) - defining Unicode char U+017B (decimal 379) - defining Unicode char U+017C (decimal 380) - defining Unicode char U+017D (decimal 381) - defining Unicode char U+017E (decimal 382) - defining Unicode char U+01CD (decimal 461) - defining Unicode char U+01CE (decimal 462) - defining Unicode char U+01CF (decimal 463) - defining Unicode char U+01D0 (decimal 464) - defining Unicode char U+01D1 (decimal 465) - defining Unicode char U+01D2 (decimal 466) - defining Unicode char U+01D3 (decimal 467) - defining Unicode char U+01D4 (decimal 468) - defining Unicode char U+01E2 (decimal 482) - defining Unicode char U+01E3 (decimal 483) - defining Unicode char U+01E6 (decimal 486) - defining Unicode char U+01E7 (decimal 487) - defining Unicode char U+01E8 (decimal 488) - defining Unicode char U+01E9 (decimal 489) - defining Unicode char U+01EA (decimal 490) - defining Unicode char U+01EB (decimal 491) - defining Unicode char U+01F0 (decimal 496) - defining Unicode char U+01F4 (decimal 500) - defining Unicode char U+01F5 (decimal 501) - defining Unicode char U+0218 (decimal 536) - defining Unicode char U+0219 (decimal 537) - defining Unicode char U+021A (decimal 538) - defining Unicode char U+021B (decimal 539) - defining Unicode char U+1E02 (decimal 7682) - defining Unicode char U+1E03 (decimal 7683) - defining Unicode char U+200C (decimal 8204) - defining Unicode char U+2010 (decimal 8208) - defining Unicode char U+2011 (decimal 8209) - defining Unicode char U+2012 (decimal 8210) - defining Unicode char U+2013 (decimal 8211) - defining Unicode char U+2014 (decimal 8212) - defining Unicode char U+2015 (decimal 8213) - defining Unicode char U+2018 (decimal 8216) - defining Unicode char U+2019 (decimal 8217) - defining Unicode char U+201A (decimal 8218) - defining Unicode char U+201C (decimal 8220) - defining Unicode char U+201D (decimal 8221) - defining Unicode char U+201E (decimal 8222) - defining Unicode char U+2030 (decimal 8240) - defining Unicode char U+2031 (decimal 8241) - defining Unicode char U+2039 (decimal 8249) - defining Unicode char U+203A (decimal 8250) - defining Unicode char U+2423 (decimal 9251) -) -Now handling font encoding OT1 ... -... processing UTF-8 mapping file for font encoding OT1 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\ot1enc.dfu" -File: ot1enc.dfu 2016/02/28 v1.1s UTF-8 support for inputenc - defining Unicode char U+00A0 (decimal 160) - defining Unicode char U+00A1 (decimal 161) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00AD (decimal 173) - defining Unicode char U+00B8 (decimal 184) - defining Unicode char U+00BF (decimal 191) - defining Unicode char U+00C5 (decimal 197) - defining Unicode char U+00C6 (decimal 198) - defining Unicode char U+00D8 (decimal 216) - defining Unicode char U+00DF (decimal 223) - defining Unicode char U+00E6 (decimal 230) - defining Unicode char U+00EC (decimal 236) - defining Unicode char U+00ED (decimal 237) - defining Unicode char U+00EE (decimal 238) - defining Unicode char U+00EF (decimal 239) - defining Unicode char U+00F8 (decimal 248) - defining Unicode char U+0131 (decimal 305) - defining Unicode char U+0141 (decimal 321) - defining Unicode char U+0142 (decimal 322) - defining Unicode char U+0152 (decimal 338) - defining Unicode char U+0153 (decimal 339) - defining Unicode char U+0174 (decimal 372) - defining Unicode char U+0175 (decimal 373) - defining Unicode char U+0176 (decimal 374) - defining Unicode char U+0177 (decimal 375) - defining Unicode char U+0218 (decimal 536) - defining Unicode char U+0219 (decimal 537) - defining Unicode char U+021A (decimal 538) - defining Unicode char U+021B (decimal 539) - defining Unicode char U+2013 (decimal 8211) - defining Unicode char U+2014 (decimal 8212) - defining Unicode char U+2018 (decimal 8216) - defining Unicode char U+2019 (decimal 8217) - defining Unicode char U+201C (decimal 8220) - defining Unicode char U+201D (decimal 8221) -) -Now handling font encoding OMS ... -... processing UTF-8 mapping file for font encoding OMS - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\omsenc.dfu" -File: omsenc.dfu 2016/02/28 v1.1s UTF-8 support for inputenc - defining Unicode char U+00A7 (decimal 167) - defining Unicode char U+00B6 (decimal 182) - defining Unicode char U+00B7 (decimal 183) - defining Unicode char U+2020 (decimal 8224) - defining Unicode char U+2021 (decimal 8225) - defining Unicode char U+2022 (decimal 8226) -) -Now handling font encoding OMX ... -... no UTF-8 mapping file for font encoding OMX -Now handling font encoding U ... -... no UTF-8 mapping file for font encoding U - defining Unicode char U+00A9 (decimal 169) - defining Unicode char U+00AA (decimal 170) - defining Unicode char U+00AE (decimal 174) - defining Unicode char U+00BA (decimal 186) - defining Unicode char U+02C6 (decimal 710) - defining Unicode char U+02DC (decimal 732) - defining Unicode char U+200C (decimal 8204) - defining Unicode char U+2026 (decimal 8230) - defining Unicode char U+2122 (decimal 8482) - defining Unicode char U+2423 (decimal 9251) -)) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\xcolor\xcolor.sty" -Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK) - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\00miktex\color.cfg" -File: color.cfg 2016/01/02 v1.6 sample color configuration -) -Package xcolor Info: Driver file: pdftex.def on input line 225. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics-def\pdftex.def" -File: pdftex.def 2016/07/10 v0.06j Graphics/color for pdfTeX - -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\oberdiek\infwarerr.sty" -Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO) -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\oberdiek\ltxcmds.sty" -Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) -) -\Gread@gobject=\count92 -) -Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348. -Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352. -Package xcolor Info: Model `RGB' extended on input line 1364. -Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366. -Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367. -Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368. -Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369. -Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370. -Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\xcolor\svgnam.def" -File: svgnam.def 2016/05/11 v2.12 Predefined colors according to SVG 1.1 (UK) -)) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics\graphicx.sty" -Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics\graphics.sty" -Package: graphics 2016/07/10 v1.0t Standard LaTeX Graphics (DPC,SPQR) - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics\trig.sty" -Package: trig 2016/01/03 v1.10 sin cos tan (DPC) -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\00miktex\graphics.cfg" -File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration -) -Package graphics Info: Driver file: pdftex.def on input line 99. -) -\Gin@req@height=\dimen106 -\Gin@req@width=\dimen107 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsmath\amsmath.sty" -Package: amsmath 2016/06/28 v2.15d AMS math features -\@mathmargin=\skip50 - -For additional information on amsmath, use the `?' option. -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsmath\amstext.sty" -Package: amstext 2000/06/29 v2.01 AMS text - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsmath\amsgen.sty" -File: amsgen.sty 1999/11/30 v2.0 generic functions -\@emptytoks=\toks18 -\ex@=\dimen108 -)) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsmath\amsbsy.sty" -Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen109 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsmath\amsopn.sty" -Package: amsopn 2016/03/08 v2.02 operator names -) -\inf@bad=\count93 -LaTeX Info: Redefining \frac on input line 199. -\uproot@=\count94 -\leftroot@=\count95 -LaTeX Info: Redefining \overline on input line 297. -\classnum@=\count96 -\DOTSCASE@=\count97 -LaTeX Info: Redefining \ldots on input line 394. -LaTeX Info: Redefining \dots on input line 397. -LaTeX Info: Redefining \cdots on input line 518. -\Mathstrutbox@=\box26 -\strutbox@=\box27 -\big@size=\dimen110 -LaTeX Font Info: Redeclaring font encoding OML on input line 634. -LaTeX Font Info: Redeclaring font encoding OMS on input line 635. -\macc@depth=\count98 -\c@MaxMatrixCols=\count99 -\dotsspace@=\muskip10 -\c@parentequation=\count100 -\dspbrk@lvl=\count101 -\tag@help=\toks19 -\row@=\count102 -\column@=\count103 -\maxfields@=\count104 -\andhelp@=\toks20 -\eqnshift@=\dimen111 -\alignsep@=\dimen112 -\tagshift@=\dimen113 -\tagwidth@=\dimen114 -\totwidth@=\dimen115 -\lineht@=\dimen116 -\@envbody=\toks21 -\multlinegap=\skip51 -\multlinetaggap=\skip52 -\mathdisplay@stack=\toks22 -LaTeX Info: Redefining \[ on input line 2739. -LaTeX Info: Redefining \] on input line 2740. -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsfonts\amssymb.sty" -Package: amssymb 2013/01/14 v3.01 AMS font symbols - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsfonts\amsfonts.sty" -Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support -\symAMSa=\mathgroup4 -\symAMSb=\mathgroup5 -LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' -(Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amscls\amsthm.sty" -Package: amsthm 2015/03/04 v2.20.2 -\thm@style=\toks23 -\thm@bodyfont=\toks24 -\thm@headfont=\toks25 -\thm@notefont=\toks26 -\thm@headpunct=\toks27 -\thm@preskip=\skip53 -\thm@postskip=\skip54 -\thm@headsep=\skip55 -\dth@everypar=\toks28 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsmath\amscd.sty" -Package: amscd 1999/11/29 v2.0 AMS Commutatitive Diagrams -\athelp@=\toks29 -\minaw@=\dimen117 -\bigaw@=\dimen118 -\minCDarrowwidth=\dimen119 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\tools\tabularx.sty" -Package: tabularx 2016/02/03 v2.11 `tabularx' package (DPC) - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\tools\array.sty" -Package: array 2014/10/28 v2.4c Tabular extension package (FMi) -\col@sep=\dimen120 -\extrarowheight=\dimen121 -\NC@list=\toks30 -\extratabsurround=\skip56 -\backup@length=\skip57 -) -\TX@col@width=\dimen122 -\TX@old@table=\dimen123 -\TX@old@col=\dimen124 -\TX@target=\dimen125 -\TX@delta=\dimen126 -\TX@cols=\count105 -\TX@ftn=\toks31 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\url\url.sty" -\Urlmuskip=\muskip11 -Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\geometry\geometry.sty" -Package: geometry 2010/09/12 v5.6 Page Geometry - -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\oberdiek\ifpdf.sty" -Package: ifpdf 2016/05/14 v3.1 Provides the ifpdf switch -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\oberdiek\ifvtex.sty" -Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) -Package ifvtex Info: VTeX not detected. -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\ifxetex\ifxetex.sty" -Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional -) -\Gm@cnth=\count106 -\Gm@cntv=\count107 -\c@Gm@tempcnt=\count108 -\Gm@bindingoffset=\dimen127 -\Gm@wd@mp=\dimen128 -\Gm@odd@mp=\dimen129 -\Gm@even@mp=\dimen130 -\Gm@layoutwidth=\dimen131 -\Gm@layoutheight=\dimen132 -\Gm@layouthoffset=\dimen133 -\Gm@layoutvoffset=\dimen134 -\Gm@dimlist=\toks32 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\geometry\geometry.cfg")) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\ae\ae.sty" -Package: ae 2001/02/12 1.3 Almost European Computer Modern - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\fontenc.sty" -Package: fontenc 2016/06/19 v1.99m Standard LaTeX package - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\t1enc.def" -File: t1enc.def 2016/06/19 v1.99m Standard LaTeX file -LaTeX Font Info: Redeclaring font encoding T1 on input line 48. -) -LaTeX Font Info: Try loading font information for T1+aer on input line 105. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\ae\t1aer.fd" -File: t1aer.fd 1997/11/16 Font definitions for T1/aer. -))) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\float\float.sty" -Package: float 2001/11/08 v1.3d Float enhancements (AL) -\c@float@type=\count109 -\float@exts=\toks33 -\float@box=\box28 -\@float@everytoks=\toks34 -\@floatcapt=\box29 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\hyperref\hyperref.sty" -Package: hyperref 2016/06/24 v6.83q Hypertext links for LaTeX - -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\oberdiek\hobsub-hyperref.sty" -Package: hobsub-hyperref 2016/05/16 v1.14 Bundle oberdiek, subset hyperref (HO) - - -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\oberdiek\hobsub-generic.sty" -Package: hobsub-generic 2016/05/16 v1.14 Bundle oberdiek, subset generic (HO) -Package: hobsub 2016/05/16 v1.14 Construct package bundles (HO) -Package hobsub Info: Skipping package `infwarerr' (already loaded). -Package hobsub Info: Skipping package `ltxcmds' (already loaded). -Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO) -Package ifluatex Info: LuaTeX not detected. -Package hobsub Info: Skipping package `ifvtex' (already loaded). -Package: intcalc 2016/05/16 v1.2 Expandable calculations with integers (HO) -Package hobsub Info: Skipping package `ifpdf' (already loaded). -Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO) -Package etexcmds Info: Could not find \expanded. -(etexcmds) That can mean that you are not using pdfTeX 1.50 or -(etexcmds) that some package has redefined \expanded. -(etexcmds) In the latter case, load this package earlier. -Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO) -Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO) -Package: pdftexcmds 2016/05/21 v0.22 Utility functions of pdfTeX for LuaTeX (HO -) -Package pdftexcmds Info: LuaTeX not detected. -Package pdftexcmds Info: \pdf@primitive is available. -Package pdftexcmds Info: \pdf@ifprimitive is available. -Package pdftexcmds Info: \pdfdraftmode found. -Package: pdfescape 2016/05/16 v1.14 Implements pdfTeX's escape features (HO) -Package: bigintcalc 2016/05/16 v1.4 Expandable calculations on big integers (HO -) -Package: bitset 2016/05/16 v1.2 Handle bit-vector datatype (HO) -Package: uniquecounter 2016/05/16 v1.3 Provide unlimited unique counter (HO) -) -Package hobsub Info: Skipping package `hobsub' (already loaded). -Package: letltxmacro 2016/05/16 v1.5 Let assignment for LaTeX macros (HO) -Package: hopatch 2016/05/16 v1.3 Wrapper for package hooks (HO) -Package: xcolor-patch 2016/05/16 xcolor patch -Package: atveryend 2016/05/16 v1.9 Hooks at the very end of document (HO) -Package atveryend Info: \enddocument detected (standard20110627). -Package: atbegshi 2016/06/09 v1.18 At begin shipout hook (HO) -Package: refcount 2016/05/16 v3.5 Data extraction from label references (HO) -Package: hycolor 2016/05/16 v1.8 Color options for hyperref/bookmark (HO) -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\oberdiek\auxhook.sty" -Package: auxhook 2016/05/16 v1.4 Hooks for auxiliary files (HO) -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\oberdiek\kvoptions.sty" -Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO) -) -\@linkdim=\dimen135 -\Hy@linkcounter=\count110 -\Hy@pagecounter=\count111 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\hyperref\pd1enc.def" -File: pd1enc.def 2016/06/24 v6.83q Hyperref: PDFDocEncoding definition (HO) -Now handling font encoding PD1 ... -... no UTF-8 mapping file for font encoding PD1 -) -\Hy@SavedSpaceFactor=\count112 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\00miktex\hyperref.cfg" -File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive -) -Package hyperref Info: Hyper figures OFF on input line 4486. -Package hyperref Info: Link nesting OFF on input line 4491. -Package hyperref Info: Hyper index ON on input line 4494. -Package hyperref Info: Plain pages OFF on input line 4501. -Package hyperref Info: Backreferencing OFF on input line 4506. -Package hyperref Info: Implicit mode ON; LaTeX internals redefined. -Package hyperref Info: Bookmarks ON on input line 4735. -\c@Hy@tempcnt=\count113 -LaTeX Info: Redefining \url on input line 5088. -\XeTeXLinkMargin=\dimen136 -\Fld@menulength=\count114 -\Field@Width=\dimen137 -\Fld@charsize=\dimen138 -Package hyperref Info: Hyper figures OFF on input line 6342. -Package hyperref Info: Link nesting OFF on input line 6347. -Package hyperref Info: Hyper index ON on input line 6350. -Package hyperref Info: backreferencing OFF on input line 6357. -Package hyperref Info: Link coloring OFF on input line 6362. -Package hyperref Info: Link coloring with OCG OFF on input line 6367. -Package hyperref Info: PDF/A mode OFF on input line 6372. -LaTeX Info: Redefining \ref on input line 6412. -LaTeX Info: Redefining \pageref on input line 6416. -\Hy@abspage=\count115 -\c@Item=\count116 -\c@Hfootnote=\count117 -) - -Package hyperref Message: Driver (autodetected): hpdftex. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\hyperref\hpdftex.def" -File: hpdftex.def 2016/06/24 v6.83q Hyperref driver for pdfTeX -\Fld@listcount=\count118 -\c@bookmark@seq@number=\count119 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\oberdiek\rerunfilecheck.sty" -Package: rerunfilecheck 2016/05/16 v1.8 Rerun checks for auxiliary files (HO) -Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 -82. -) -\Hy@SectionHShift=\skip58 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\listings\listings.sty" -\lst@mode=\count120 -\lst@gtempboxa=\box30 -\lst@token=\toks35 -\lst@length=\count121 -\lst@currlwidth=\dimen139 -\lst@column=\count122 -\lst@pos=\count123 -\lst@lostspace=\dimen140 -\lst@width=\dimen141 -\lst@newlines=\count124 -\lst@lineno=\count125 -\lst@maxwidth=\dimen142 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\listings\lstmisc.sty" -File: lstmisc.sty 2015/06/04 1.6 (Carsten Heinz) -\c@lstnumber=\count126 -\lst@skipnumbers=\count127 -\lst@framebox=\box31 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\listings\listings.cfg" -File: listings.cfg 2015/06/04 1.6 listings configuration -)) -Package: listings 2015/06/04 1.6 (Carsten Heinz) -\c@defin=\count128 -\c@prop=\count129 -\c@thm=\count130 -\c@cor=\count131 -\c@lem=\count132 -\c@nota=\count133 -\c@rem=\count134 -\c@conj=\count135 -\c@nb=\count136 - -(rapport.aux) -\openout1 = `rapport.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 41. -LaTeX Font Info: ... okay on input line 41. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 41. -LaTeX Font Info: ... okay on input line 41. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 41. -LaTeX Font Info: ... okay on input line 41. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 41. -LaTeX Font Info: ... okay on input line 41. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 41. -LaTeX Font Info: ... okay on input line 41. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 41. -LaTeX Font Info: ... okay on input line 41. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 41. -LaTeX Font Info: ... okay on input line 41. -LaTeX Info: Redefining \degres on input line 41. -LaTeX Info: Redefining \dots on input line 41. -LaTeX Info: Redefining \up on input line 41. - ("C:\Program Files (x86)\MiKTeX 2.9\tex\context\base\supp-pdf.mkii" -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count137 -\scratchdimen=\dimen143 -\scratchbox=\box32 -\nofMPsegments=\count138 -\nofMParguments=\count139 -\everyMPshowfont=\toks36 -\MPscratchCnt=\count140 -\MPscratchDim=\dimen144 -\MPnumerator=\count141 -\makeMPintoPDFobject=\count142 -\everyMPtoPDFconversion=\toks37 -) ("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\oberdiek\epstopdf-base.sty" -Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\oberdiek\grfext.sty" -Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO) -) -Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 -38. -Package grfext Info: Graphics extension search list: -(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE -G,.JBIG2,.JB2,.eps] -(grfext) \AppendGraphicsExtensions on input line 456. -) -*geometry* driver: auto-detecting -*geometry* detected driver: pdftex -*geometry* verbose mode - [ preamble ] result: -* driver: pdftex -* paper: a4paper -* layout: -* layoutoffset:(h,v)=(0.0pt,0.0pt) -* modes: -* h-part:(L,W,R)=(42.67912pt, 512.14963pt, 42.67912pt) -* v-part:(T,H,B)=(56.9055pt, 731.23584pt, 56.9055pt) -* \paperwidth=597.50787pt -* \paperheight=845.04684pt -* \textwidth=512.14963pt -* \textheight=731.23584pt -* \oddsidemargin=-29.59087pt -* \evensidemargin=-29.59087pt -* \topmargin=-52.36449pt -* \headheight=12.0pt -* \headsep=25.0pt -* \topskip=11.0pt -* \footskip=30.0pt -* \marginparwidth=50.0pt -* \marginparsep=10.0pt -* \columnsep=10.0pt -* \skip\footins=10.0pt plus 4.0pt minus 2.0pt -* \hoffset=0.0pt -* \voffset=0.0pt -* \mag=1000 -* \@twocolumnfalse -* \@twosidefalse -* \@mparswitchfalse -* \@reversemarginfalse -* (1in=72.27pt=25.4mm, 1cm=28.453pt) - -\AtBeginShipoutBox=\box33 -Package hyperref Info: Link coloring OFF on input line 41. -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\hyperref\nameref.sty" -Package: nameref 2016/05/21 v2.44 Cross-referencing by name of section - -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\oberdiek\gettitlestring.sty" -Package: gettitlestring 2016/05/16 v1.5 Cleanup title references (HO) -) -\c@section@level=\count143 -) -LaTeX Info: Redefining \ref on input line 41. -LaTeX Info: Redefining \pageref on input line 41. -LaTeX Info: Redefining \nameref on input line 41. - -(rapport.out) (rapport.out) -\@outlinefile=\write3 -\openout3 = `rapport.out'. - -\c@lstlisting=\count144 - -File: logoUEVE.png Graphic file (type png) - - -Package pdftex.def Info: logoUEVE.png used on input line 58. -(pdftex.def) Requested size: 116.78624pt x 117.17168pt. - [1 - -{C:/ProgramData/MiKTeX/2.9/pdftex/config/pdftex.map} <./logoUEVE.png>] (rapport -.toc -LaTeX Font Info: Try loading font information for U+msa on input line 3. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsfonts\umsa.fd" -File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) -LaTeX Font Info: Try loading font information for U+msb on input line 3. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsfonts\umsb.fd" -File: umsb.fd 2013/01/14 v3.01 AMS symbols B -)) -\tf@toc=\write4 -\openout4 = `rapport.toc'. - - [2 - -] [3 - -] - -File: conversion_ui_py.jpg Graphic file (type jpg) - - -Package pdftex.def Info: conversion_ui_py.jpg used on input line 132. -(pdftex.def) Requested size: 215.00491pt x 95.75848pt. - - -File: exemple_signal_slot.png Graphic file (type png) - - -Package pdftex.def Info: exemple_signal_slot.png used on input line 146. -(pdftex.def) Requested size: 211.28885pt x 118.4422pt. - -Underfull \hbox (badness 10000) in paragraph at lines 139--150 - - [] - - -File: signal_slot.jpg Graphic file (type jpg) - -Package pdftex.def Info: signal_slot.jpg used on input line 151. -(pdftex.def) Requested size: 189.50464pt x 59.82243pt. - -[4 <./conversion_ui_py.jpg> <./exemple_signal_slot.png>] - -File: fenetre_principale.png Graphic file (type png) - - -Package pdftex.def Info: fenetre_principale.png used on input line 156. -(pdftex.def) Requested size: 266.49767pt x 302.63295pt. - - -File: fen_etat_noeud.png Graphic file (type png) - -Package pdftex.def Info: fen_etat_noeud.png used on input line 167. -(pdftex.def) Requested size: 333.34793pt x 289.08221pt. - -[5 <./signal_slot.jpg> <./fenetre_principale.png>] -Underfull \hbox (badness 10000) in paragraph at lines 178--179 - - [] - - -File: check_etatnoeud.png Graphic file (type png) - - -Package pdftex.def Info: check_etatnoeud.png used on input line 185. -(pdftex.def) Requested size: 510.40562pt x 327.47264pt. - [6 <./fen_etat_noeud.png>] -Underfull \hbox (badness 10000) in paragraph at lines 187--188 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 196--198 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 196--198 - - [] - - -File: messagebox.png Graphic file (type png) - -Package pdftex.def Info: messagebox.png used on input line 199. -(pdftex.def) Requested size: 201.75401pt x 148.15369pt. -LaTeX Font Info: Try loading font information for T1+aett on input line 214. - - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\ae\t1aett.fd" -File: t1aett.fd 1997/11/16 Font definitions for T1/aett. -) [7 <./check_etatnoeud.png> <./messagebox.png>] [8] - -File: arborescence_fichiers_IHM.jpg Graphic file (type jpg) - - -Package pdftex.def Info: arborescence_fichiers_IHM.jpg used on input line 221. -(pdftex.def) Requested size: 529.07301pt x 264.1852pt. - -Overfull \hbox (16.92339pt too wide) in paragraph at lines 221--222 - [] - [] - -Package atveryend Info: Empty hook `BeforeClearDocument' on input line 225. -[9 <./arborescence_fichiers_IHM.jpg>] -Package atveryend Info: Empty hook `AfterLastShipout' on input line 225. - (rapport.aux) -Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 225. -Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 225. -Package rerunfilecheck Info: File `rapport.out' has not changed. -(rerunfilecheck) Checksum: F3699A8085674F28E1BB70DA389C4FF9;1243. -Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 225. - ) -Here is how much of TeX's memory you used: - 10634 strings out of 493334 - 146625 string characters out of 3136675 - 254905 words of memory out of 3000000 - 13925 multiletter control sequences out of 15000+200000 - 39314 words of font info for 83 fonts, out of 3000000 for 9000 - 1141 hyphenation exceptions out of 8191 - 29i,8n,35p,520b,986s stack positions out of 5000i,500n,10000p,200000b,50000s - - -Output written on rapport.pdf (9 pages, 311006 bytes). -PDF statistics: - 195 PDF objects out of 1000 (max. 8388607) - 36 named destinations out of 1000 (max. 500000) - 182 words of extra memory for PDF output out of 10000 (max. 10000000) - +This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) (preloaded format=pdflatex 2016.11.1) 3 NOV 2016 23:27 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**rapport.tex +(./rapport.tex +LaTeX2e <2014/05/01> +Babel <3.9l> and hyphenation patterns for 79 languages loaded. +(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls +Document Class: article 2014/09/29 v1.4h Standard LaTeX document class +(/usr/share/texlive/texmf-dist/tex/latex/base/size11.clo +File: size11.clo 2014/09/29 v1.4h Standard LaTeX file (size option) +) +\c@part=\count79 +\c@section=\count80 +\c@subsection=\count81 +\c@subsubsection=\count82 +\c@paragraph=\count83 +\c@subparagraph=\count84 +\c@figure=\count85 +\c@table=\count86 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +) +(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2014/09/25 3.9l The Babel package + +(/usr/share/texlive/texmf-dist/tex/generic/babel-french/frenchb.ldf +Language: frenchb 2014/09/16 v3.1b French support from the babel system + +(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def +File: babel.def 2014/09/25 3.9l Babel common definitions +\babel@savecnt=\count87 +\U@D=\dimen103 +) +\l@acadian = a dialect from \language\l@french +\l@canadien = a dialect from \language\l@french +\FBcolonskip=\skip43 +\FBthinskip=\skip44 +\FB@interchartokenstateORI=\count88 +Package babel Info: Making : an active character on input line 371. +Package babel Info: Making ; an active character on input line 372. +Package babel Info: Making ! an active character on input line 373. +Package babel Info: Making ? an active character on input line 374. +\FBguillskip=\skip45 +\FBguill@level=\count89 +\FB@Mht=\dimen104 +\std@mcc=\count90 +\dec@mcc=\count91 +\listindentFB=\skip46 +\labelwidthFB=\skip47 +\leftmarginFB=\skip48 +\parindentFFN=\dimen105 +)) +(/usr/share/texlive/texmf-dist/tex/latex/carlisle/scalefnt.sty) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2014/05/08 v1.15 key=value parser (DPC) +\KV@toks@=\toks14 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2014/04/30 v1.2b Input encoding file +\inpenc@prehook=\toks15 +\inpenc@posthook=\toks16 + +(/usr/share/texlive/texmf-dist/tex/latex/base/utf8.def +File: utf8.def 2014/09/29 v1.1m UTF-8 support for inputenc +Now handling font encoding OML ... +... no UTF-8 mapping file for font encoding OML +Now handling font encoding T1 ... +... processing UTF-8 mapping file for font encoding T1 + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu +File: t1enc.dfu 2014/09/29 v1.1m UTF-8 support for inputenc + defining Unicode char U+00A1 (decimal 161) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00AB (decimal 171) + defining Unicode char U+00BB (decimal 187) + defining Unicode char U+00BF (decimal 191) + defining Unicode char U+00C0 (decimal 192) + defining Unicode char U+00C1 (decimal 193) + defining Unicode char U+00C2 (decimal 194) + defining Unicode char U+00C3 (decimal 195) + defining Unicode char U+00C4 (decimal 196) + defining Unicode char U+00C5 (decimal 197) + defining Unicode char U+00C6 (decimal 198) + defining Unicode char U+00C7 (decimal 199) + defining Unicode char U+00C8 (decimal 200) + defining Unicode char U+00C9 (decimal 201) + defining Unicode char U+00CA (decimal 202) + defining Unicode char U+00CB (decimal 203) + defining Unicode char U+00CC (decimal 204) + defining Unicode char U+00CD (decimal 205) + defining Unicode char U+00CE (decimal 206) + defining Unicode char U+00CF (decimal 207) + defining Unicode char U+00D0 (decimal 208) + defining Unicode char U+00D1 (decimal 209) + defining Unicode char U+00D2 (decimal 210) + defining Unicode char U+00D3 (decimal 211) + defining Unicode char U+00D4 (decimal 212) + defining Unicode char U+00D5 (decimal 213) + defining Unicode char U+00D6 (decimal 214) + defining Unicode char U+00D8 (decimal 216) + defining Unicode char U+00D9 (decimal 217) + defining Unicode char U+00DA (decimal 218) + defining Unicode char U+00DB (decimal 219) + defining Unicode char U+00DC (decimal 220) + defining Unicode char U+00DD (decimal 221) + defining Unicode char U+00DE (decimal 222) + defining Unicode char U+00DF (decimal 223) + defining Unicode char U+00E0 (decimal 224) + defining Unicode char U+00E1 (decimal 225) + defining Unicode char U+00E2 (decimal 226) + defining Unicode char U+00E3 (decimal 227) + defining Unicode char U+00E4 (decimal 228) + defining Unicode char U+00E5 (decimal 229) + defining Unicode char U+00E6 (decimal 230) + defining Unicode char U+00E7 (decimal 231) + defining Unicode char U+00E8 (decimal 232) + defining Unicode char U+00E9 (decimal 233) + defining Unicode char U+00EA (decimal 234) + defining Unicode char U+00EB (decimal 235) + defining Unicode char U+00EC (decimal 236) + defining Unicode char U+00ED (decimal 237) + defining Unicode char U+00EE (decimal 238) + defining Unicode char U+00EF (decimal 239) + defining Unicode char U+00F0 (decimal 240) + defining Unicode char U+00F1 (decimal 241) + defining Unicode char U+00F2 (decimal 242) + defining Unicode char U+00F3 (decimal 243) + defining Unicode char U+00F4 (decimal 244) + defining Unicode char U+00F5 (decimal 245) + defining Unicode char U+00F6 (decimal 246) + defining Unicode char U+00F8 (decimal 248) + defining Unicode char U+00F9 (decimal 249) + defining Unicode char U+00FA (decimal 250) + defining Unicode char U+00FB (decimal 251) + defining Unicode char U+00FC (decimal 252) + defining Unicode char U+00FD (decimal 253) + defining Unicode char U+00FE (decimal 254) + defining Unicode char U+00FF (decimal 255) + defining Unicode char U+0102 (decimal 258) + defining Unicode char U+0103 (decimal 259) + defining Unicode char U+0104 (decimal 260) + defining Unicode char U+0105 (decimal 261) + defining Unicode char U+0106 (decimal 262) + defining Unicode char U+0107 (decimal 263) + defining Unicode char U+010C (decimal 268) + defining Unicode char U+010D (decimal 269) + defining Unicode char U+010E (decimal 270) + defining Unicode char U+010F (decimal 271) + defining Unicode char U+0110 (decimal 272) + defining Unicode char U+0111 (decimal 273) + defining Unicode char U+0118 (decimal 280) + defining Unicode char U+0119 (decimal 281) + defining Unicode char U+011A (decimal 282) + defining Unicode char U+011B (decimal 283) + defining Unicode char U+011E (decimal 286) + defining Unicode char U+011F (decimal 287) + defining Unicode char U+0130 (decimal 304) + defining Unicode char U+0131 (decimal 305) + defining Unicode char U+0132 (decimal 306) + defining Unicode char U+0133 (decimal 307) + defining Unicode char U+0139 (decimal 313) + defining Unicode char U+013A (decimal 314) + defining Unicode char U+013D (decimal 317) + defining Unicode char U+013E (decimal 318) + defining Unicode char U+0141 (decimal 321) + defining Unicode char U+0142 (decimal 322) + defining Unicode char U+0143 (decimal 323) + defining Unicode char U+0144 (decimal 324) + defining Unicode char U+0147 (decimal 327) + defining Unicode char U+0148 (decimal 328) + defining Unicode char U+014A (decimal 330) + defining Unicode char U+014B (decimal 331) + defining Unicode char U+0150 (decimal 336) + defining Unicode char U+0151 (decimal 337) + defining Unicode char U+0152 (decimal 338) + defining Unicode char U+0153 (decimal 339) + defining Unicode char U+0154 (decimal 340) + defining Unicode char U+0155 (decimal 341) + defining Unicode char U+0158 (decimal 344) + defining Unicode char U+0159 (decimal 345) + defining Unicode char U+015A (decimal 346) + defining Unicode char U+015B (decimal 347) + defining Unicode char U+015E (decimal 350) + defining Unicode char U+015F (decimal 351) + defining Unicode char U+0160 (decimal 352) + defining Unicode char U+0161 (decimal 353) + defining Unicode char U+0162 (decimal 354) + defining Unicode char U+0163 (decimal 355) + defining Unicode char U+0164 (decimal 356) + defining Unicode char U+0165 (decimal 357) + defining Unicode char U+016E (decimal 366) + defining Unicode char U+016F (decimal 367) + defining Unicode char U+0170 (decimal 368) + defining Unicode char U+0171 (decimal 369) + defining Unicode char U+0178 (decimal 376) + defining Unicode char U+0179 (decimal 377) + defining Unicode char U+017A (decimal 378) + defining Unicode char U+017B (decimal 379) + defining Unicode char U+017C (decimal 380) + defining Unicode char U+017D (decimal 381) + defining Unicode char U+017E (decimal 382) + defining Unicode char U+200C (decimal 8204) + defining Unicode char U+2013 (decimal 8211) + defining Unicode char U+2014 (decimal 8212) + defining Unicode char U+2018 (decimal 8216) + defining Unicode char U+2019 (decimal 8217) + defining Unicode char U+201A (decimal 8218) + defining Unicode char U+201C (decimal 8220) + defining Unicode char U+201D (decimal 8221) + defining Unicode char U+201E (decimal 8222) + defining Unicode char U+2030 (decimal 8240) + defining Unicode char U+2031 (decimal 8241) + defining Unicode char U+2039 (decimal 8249) + defining Unicode char U+203A (decimal 8250) + defining Unicode char U+2423 (decimal 9251) +) +Now handling font encoding OT1 ... +... processing UTF-8 mapping file for font encoding OT1 + +(/usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu +File: ot1enc.dfu 2014/09/29 v1.1m UTF-8 support for inputenc + defining Unicode char U+00A1 (decimal 161) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00B8 (decimal 184) + defining Unicode char U+00BF (decimal 191) + defining Unicode char U+00C5 (decimal 197) + defining Unicode char U+00C6 (decimal 198) + defining Unicode char U+00D8 (decimal 216) + defining Unicode char U+00DF (decimal 223) + defining Unicode char U+00E6 (decimal 230) + defining Unicode char U+00EC (decimal 236) + defining Unicode char U+00ED (decimal 237) + defining Unicode char U+00EE (decimal 238) + defining Unicode char U+00EF (decimal 239) + defining Unicode char U+00F8 (decimal 248) + defining Unicode char U+0131 (decimal 305) + defining Unicode char U+0141 (decimal 321) + defining Unicode char U+0142 (decimal 322) + defining Unicode char U+0152 (decimal 338) + defining Unicode char U+0153 (decimal 339) + defining Unicode char U+2013 (decimal 8211) + defining Unicode char U+2014 (decimal 8212) + defining Unicode char U+2018 (decimal 8216) + defining Unicode char U+2019 (decimal 8217) + defining Unicode char U+201C (decimal 8220) + defining Unicode char U+201D (decimal 8221) +) +Now handling font encoding OMS ... +... processing UTF-8 mapping file for font encoding OMS + +(/usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu +File: omsenc.dfu 2014/09/29 v1.1m UTF-8 support for inputenc + defining Unicode char U+00A7 (decimal 167) + defining Unicode char U+00B6 (decimal 182) + defining Unicode char U+00B7 (decimal 183) + defining Unicode char U+2020 (decimal 8224) + defining Unicode char U+2021 (decimal 8225) + defining Unicode char U+2022 (decimal 8226) +) +Now handling font encoding OMX ... +... no UTF-8 mapping file for font encoding OMX +Now handling font encoding U ... +... no UTF-8 mapping file for font encoding U + defining Unicode char U+00A9 (decimal 169) + defining Unicode char U+00AA (decimal 170) + defining Unicode char U+00AE (decimal 174) + defining Unicode char U+00BA (decimal 186) + defining Unicode char U+02C6 (decimal 710) + defining Unicode char U+02DC (decimal 732) + defining Unicode char U+200C (decimal 8204) + defining Unicode char U+2026 (decimal 8230) + defining Unicode char U+2122 (decimal 8482) + defining Unicode char U+2423 (decimal 9251) +)) +(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2007/01/21 v2.11 LaTeX color extensions (UK) + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/color.cfg +File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive +) +Package xcolor Info: Driver file: pdftex.def on input line 225. + +(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def +File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty +Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO) +) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO) +) +\Gread@gobject=\count92 +) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1337. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1341. +Package xcolor Info: Model `RGB' extended on input line 1353. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1355. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1356. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1357. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1358. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1359. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1360. + +(/usr/share/texlive/texmf-dist/tex/latex/xcolor/svgnam.def +File: svgnam.def 2007/01/21 v2.11 Predefined colors according to SVG 1.1 (UK) +)) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2014/04/25 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 1999/03/16 v1.09 sin cos tan (DPC) +) +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg +File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live +) +Package graphics Info: Driver file: pdftex.def on input line 91. +) +\Gin@req@height=\dimen106 +\Gin@req@width=\dimen107 +) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2013/01/14 v2.14 AMS math features +\@mathmargin=\skip49 + +For additional information on amsmath, use the `?' option. +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2000/06/29 v2.01 + +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 +\@emptytoks=\toks17 +\ex@=\dimen108 +)) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d +\pmbraise@=\dimen109 +) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 1999/12/14 v2.01 operator names +) +\inf@bad=\count93 +LaTeX Info: Redefining \frac on input line 210. +\uproot@=\count94 +\leftroot@=\count95 +LaTeX Info: Redefining \overline on input line 306. +\classnum@=\count96 +\DOTSCASE@=\count97 +LaTeX Info: Redefining \ldots on input line 378. +LaTeX Info: Redefining \dots on input line 381. +LaTeX Info: Redefining \cdots on input line 466. +\Mathstrutbox@=\box26 +\strutbox@=\box27 +\big@size=\dimen110 +LaTeX Font Info: Redeclaring font encoding OML on input line 566. +LaTeX Font Info: Redeclaring font encoding OMS on input line 567. +\macc@depth=\count98 +\c@MaxMatrixCols=\count99 +\dotsspace@=\muskip10 +\c@parentequation=\count100 +\dspbrk@lvl=\count101 +\tag@help=\toks18 +\row@=\count102 +\column@=\count103 +\maxfields@=\count104 +\andhelp@=\toks19 +\eqnshift@=\dimen111 +\alignsep@=\dimen112 +\tagshift@=\dimen113 +\tagwidth@=\dimen114 +\totwidth@=\dimen115 +\lineht@=\dimen116 +\@envbody=\toks20 +\multlinegap=\skip50 +\multlinetaggap=\skip51 +\mathdisplay@stack=\toks21 +LaTeX Info: Redefining \[ on input line 2665. +LaTeX Info: Redefining \] on input line 2666. +) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +)) +(/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty +Package: amsthm 2009/07/02 v2.20.1 +\thm@style=\toks22 +\thm@bodyfont=\toks23 +\thm@headfont=\toks24 +\thm@notefont=\toks25 +\thm@headpunct=\toks26 +\thm@preskip=\skip52 +\thm@postskip=\skip53 +\thm@headsep=\skip54 +\dth@everypar=\toks27 +) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amscd.sty +Package: amscd 1999/11/29 v2.0 +\athelp@=\toks28 +\minaw@=\dimen117 +\bigaw@=\dimen118 +\minCDarrowwidth=\dimen119 +) +(/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty +Package: tabularx 2014/10/28 v2.10 `tabularx' package (DPC) + +(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty +Package: array 2014/10/28 v2.4c Tabular extension package (FMi) +\col@sep=\dimen120 +\extrarowheight=\dimen121 +\NC@list=\toks29 +\extratabsurround=\skip55 +\backup@length=\skip56 +) +\TX@col@width=\dimen122 +\TX@old@table=\dimen123 +\TX@old@col=\dimen124 +\TX@target=\dimen125 +\TX@delta=\dimen126 +\TX@cols=\count105 +\TX@ftn=\toks30 +) +(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty +\Urlmuskip=\muskip11 +Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. +) +(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2010/09/12 v5.6 Page Geometry + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty +Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO) +Package ifpdf Info: pdfTeX in PDF mode is detected. +) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty +Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO) +Package ifvtex Info: VTeX not detected. +) +(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty +Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional +) +\Gm@cnth=\count106 +\Gm@cntv=\count107 +\c@Gm@tempcnt=\count108 +\Gm@bindingoffset=\dimen127 +\Gm@wd@mp=\dimen128 +\Gm@odd@mp=\dimen129 +\Gm@even@mp=\dimen130 +\Gm@layoutwidth=\dimen131 +\Gm@layoutheight=\dimen132 +\Gm@layouthoffset=\dimen133 +\Gm@layoutvoffset=\dimen134 +\Gm@dimlist=\toks31 +) +(/usr/share/texlive/texmf-dist/tex/latex/ae/ae.sty +Package: ae 2001/02/12 1.3 Almost European Computer Modern + +(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2005/09/27 v1.99g Standard LaTeX package + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 43. +) +LaTeX Font Info: Try loading font information for T1+aer on input line 100. + +(/usr/share/texlive/texmf-dist/tex/latex/ae/t1aer.fd +File: t1aer.fd 1997/11/16 Font definitions for T1/aer. +))) +(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty +Package: float 2001/11/08 v1.3d Float enhancements (AL) +\c@float@type=\count109 +\float@exts=\toks32 +\float@box=\box28 +\@float@everytoks=\toks33 +\@floatcapt=\box29 +) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +Package: hyperref 2012/11/06 v6.83m Hypertext links for LaTeX + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO) + + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty +Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO) +Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO) +Package hobsub Info: Skipping package `infwarerr' (already loaded). +Package hobsub Info: Skipping package `ltxcmds' (already loaded). +Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO) +Package ifluatex Info: LuaTeX not detected. +Package hobsub Info: Skipping package `ifvtex' (already loaded). +Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO) +Package hobsub Info: Skipping package `ifpdf' (already loaded). +Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO) +Package etexcmds Info: Could not find \expanded. +(etexcmds) That can mean that you are not using pdfTeX 1.50 or +(etexcmds) that some package has redefined \expanded. +(etexcmds) In the latter case, load this package earlier. +Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO) +Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO) +Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO +) +Package pdftexcmds Info: LuaTeX not detected. +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO) +Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO +) +Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO) +Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO) +) +Package hobsub Info: Skipping package `hobsub' (already loaded). +Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO) +Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO) +Package: xcolor-patch 2011/01/30 xcolor patch +Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO) +Package atveryend Info: \enddocument detected (standard20110627). +Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO) +Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO) +Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO) +) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty +Package: auxhook 2011/03/04 v1.3 Hooks for auxiliary files (HO) +) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty +Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO) +) +\@linkdim=\dimen135 +\Hy@linkcounter=\count110 +\Hy@pagecounter=\count111 + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2012/11/06 v6.83m Hyperref: PDFDocEncoding definition (HO) +Now handling font encoding PD1 ... +... no UTF-8 mapping file for font encoding PD1 +) +\Hy@SavedSpaceFactor=\count112 + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg +File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive +) +Package hyperref Info: Hyper figures OFF on input line 4443. +Package hyperref Info: Link nesting OFF on input line 4448. +Package hyperref Info: Hyper index ON on input line 4451. +Package hyperref Info: Plain pages OFF on input line 4458. +Package hyperref Info: Backreferencing OFF on input line 4463. +Package hyperref Info: Implicit mode ON; LaTeX internals redefined. +Package hyperref Info: Bookmarks ON on input line 4688. +\c@Hy@tempcnt=\count113 +LaTeX Info: Redefining \url on input line 5041. +\XeTeXLinkMargin=\dimen136 +\Fld@menulength=\count114 +\Field@Width=\dimen137 +\Fld@charsize=\dimen138 +Package hyperref Info: Hyper figures OFF on input line 6295. +Package hyperref Info: Link nesting OFF on input line 6300. +Package hyperref Info: Hyper index ON on input line 6303. +Package hyperref Info: backreferencing OFF on input line 6310. +Package hyperref Info: Link coloring OFF on input line 6315. +Package hyperref Info: Link coloring with OCG OFF on input line 6320. +Package hyperref Info: PDF/A mode OFF on input line 6325. +LaTeX Info: Redefining \ref on input line 6365. +LaTeX Info: Redefining \pageref on input line 6369. +\Hy@abspage=\count115 +\c@Item=\count116 +\c@Hfootnote=\count117 +) + +Package hyperref Message: Driver (autodetected): hpdftex. + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def +File: hpdftex.def 2012/11/06 v6.83m Hyperref driver for pdfTeX +\Fld@listcount=\count118 +\c@bookmark@seq@number=\count119 + +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty +Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO) +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 +82. +) +\Hy@SectionHShift=\skip57 +) +(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty +\lst@mode=\count120 +\lst@gtempboxa=\box30 +\lst@token=\toks34 +\lst@length=\count121 +\lst@currlwidth=\dimen139 +\lst@column=\count122 +\lst@pos=\count123 +\lst@lostspace=\dimen140 +\lst@width=\dimen141 +\lst@newlines=\count124 +\lst@lineno=\count125 +\lst@maxwidth=\dimen142 + +(/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty +File: lstmisc.sty 2014/09/06 1.5e (Carsten Heinz) +\c@lstnumber=\count126 +\lst@skipnumbers=\count127 +\lst@framebox=\box31 +) +(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg +File: listings.cfg 2014/09/06 1.5e listings configuration +)) +Package: listings 2014/09/06 1.5e (Carsten Heinz) +\c@defin=\count128 +\c@prop=\count129 +\c@thm=\count130 +\c@cor=\count131 +\c@lem=\count132 +\c@nota=\count133 +\c@rem=\count134 +\c@conj=\count135 +\c@nb=\count136 + (./rapport.aux) +\openout1 = `rapport.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 42. +LaTeX Font Info: ... okay on input line 42. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 42. +LaTeX Font Info: ... okay on input line 42. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 42. +LaTeX Font Info: ... okay on input line 42. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 42. +LaTeX Font Info: ... okay on input line 42. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 42. +LaTeX Font Info: ... okay on input line 42. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 42. +LaTeX Font Info: ... okay on input line 42. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 42. +LaTeX Font Info: ... okay on input line 42. +LaTeX Info: Redefining \degres on input line 42. +LaTeX Info: Redefining \dots on input line 42. +LaTeX Info: Redefining \up on input line 42. + (/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count137 +\scratchdimen=\dimen143 +\scratchbox=\box32 +\nofMPsegments=\count138 +\nofMParguments=\count139 +\everyMPshowfont=\toks35 +\MPscratchCnt=\count140 +\MPscratchDim=\dimen144 +\MPnumerator=\count141 +\makeMPintoPDFobject=\count142 +\everyMPtoPDFconversion=\toks36 +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf + +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty +Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO) +) +Package grfext Info: Graphics extension search list: +(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE +G,.JBIG2,.JB2,.eps] +(grfext) \AppendGraphicsExtensions on input line 452. + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +*geometry* driver: auto-detecting +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: a4paper +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: +* h-part:(L,W,R)=(42.67912pt, 512.14963pt, 42.67912pt) +* v-part:(T,H,B)=(56.9055pt, 731.23584pt, 56.9055pt) +* \paperwidth=597.50787pt +* \paperheight=845.04684pt +* \textwidth=512.14963pt +* \textheight=731.23584pt +* \oddsidemargin=-29.59087pt +* \evensidemargin=-29.59087pt +* \topmargin=-52.36449pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=11.0pt +* \footskip=30.0pt +* \marginparwidth=50.0pt +* \marginparsep=10.0pt +* \columnsep=10.0pt +* \skip\footins=10.0pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidefalse +* \@mparswitchfalse +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +\AtBeginShipoutBox=\box33 +Package hyperref Info: Link coloring OFF on input line 42. +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty +Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO) +) +\c@section@level=\count143 +) +LaTeX Info: Redefining \ref on input line 42. +LaTeX Info: Redefining \pageref on input line 42. +LaTeX Info: Redefining \nameref on input line 42. + +(./rapport.out) (./rapport.out) +\@outlinefile=\write3 +\openout3 = `rapport.out'. + +\c@lstlisting=\count144 + +File: LogoUEVE.png Graphic file (type png) + + +Package pdftex.def Info: LogoUEVE.png used on input line 59. +(pdftex.def) Requested size: 116.78624pt x 117.17168pt. + [1 + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <./LogoUEVE.png>] (./rappor +t.toc +LaTeX Font Info: Try loading font information for U+msa on input line 3. + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Try loading font information for U+msb on input line 3. + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +)) +\tf@toc=\write4 +\openout4 = `rapport.toc'. + + [2 + +] +Underfull \hbox (badness 10000) in paragraph at lines 105--109 + + [] + +[3 + +] +File: from_clustershell.png Graphic file (type png) + + +Package pdftex.def Info: from_clustershell.png used on input line 156. +(pdftex.def) Requested size: 334.44722pt x 14.05238pt. + [4 <./from_clustershell.png>] [5] [6] + +File: conversion_ui_py.jpg Graphic file (type jpg) + + +Package pdftex.def Info: conversion_ui_py.jpg used on input line 184. +(pdftex.def) Requested size: 215.00491pt x 95.75848pt. + + +File: exemple_signal_slot.png Graphic file (type png) + + +Package pdftex.def Info: exemple_signal_slot.png used on input line 198. +(pdftex.def) Requested size: 211.28885pt x 118.4422pt. + +Underfull \hbox (badness 10000) in paragraph at lines 191--202 + + [] + + +File: signal_slot.jpg Graphic file (type jpg) + +Package pdftex.def Info: signal_slot.jpg used on input line 203. +(pdftex.def) Requested size: 189.50464pt x 59.82243pt. + +[7 <./conversion_ui_py.jpg> <./exemple_signal_slot.png>] + +File: fenetre_principale.png Graphic file (type png) + + +Package pdftex.def Info: fenetre_principale.png used on input line 208. +(pdftex.def) Requested size: 266.49767pt x 302.63295pt. + + +File: fen_etat_noeud.png Graphic file (type png) + +Package pdftex.def Info: fen_etat_noeud.png used on input line 219. +(pdftex.def) Requested size: 333.34793pt x 289.08221pt. + +[8 <./signal_slot.jpg> <./fenetre_principale.png>] +Underfull \hbox (badness 10000) in paragraph at lines 230--231 + + [] + + +File: check_etatnoeud.png Graphic file (type png) + + +Package pdftex.def Info: check_etatnoeud.png used on input line 237. +(pdftex.def) Requested size: 510.40562pt x 327.47264pt. + [9 <./fen_etat_noeud.png>] +Underfull \hbox (badness 10000) in paragraph at lines 239--240 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 248--250 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 248--250 + + [] + + +File: messagebox.png Graphic file (type png) + +Package pdftex.def Info: messagebox.png used on input line 251. +(pdftex.def) Requested size: 201.75401pt x 148.15369pt. +LaTeX Font Info: Try loading font information for T1+aett on input line 266. + + +(/usr/share/texlive/texmf-dist/tex/latex/ae/t1aett.fd +File: t1aett.fd 1997/11/16 Font definitions for T1/aett. +) [10 <./check_etatnoeud.png> <./messagebox.png>] [11] + +File: arborescence_fichiers_IHM.jpg Graphic file (type jpg) + + +Package pdftex.def Info: arborescence_fichiers_IHM.jpg used on input line 273. +(pdftex.def) Requested size: 529.07301pt x 264.1852pt. + +Overfull \hbox (16.92339pt too wide) in paragraph at lines 273--274 + [] + [] + +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 277. +[12 <./arborescence_fichiers_IHM.jpg>] +Package atveryend Info: Empty hook `AfterLastShipout' on input line 277. + (./rapport.aux) +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 277. +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 277. +Package rerunfilecheck Info: File `rapport.out' has not changed. +(rerunfilecheck) Checksum: BE8040DE4BBD396DA0C7C2F70B9E44C4;1524. +Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 277. + ) +Here is how much of TeX's memory you used: + 10504 strings out of 493105 + 144964 string characters out of 6137072 + 252948 words of memory out of 5000000 + 13722 multiletter control sequences out of 15000+600000 + 39314 words of font info for 83 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 29i,8n,35p,518b,986s stack positions out of 5000i,500n,10000p,200000b,80000s + +Output written on rapport.pdf (12 pages, 300358 bytes). +PDF statistics: + 243 PDF objects out of 1000 (max. 8388607) + 205 compressed objects within 3 object streams + 45 named destinations out of 1000 (max. 500000) + 227 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/Rapport projet/rapport.out b/Rapport projet/rapport.out old mode 100644 new mode 100755 index 108f3fe..3c63850 --- a/Rapport projet/rapport.out +++ b/Rapport projet/rapport.out @@ -1,17 +1,22 @@ -\BOOKMARK [1][-]{section.1}{Introduction}{}% 1 -\BOOKMARK [2][-]{subsection.1.1}{Objectif}{section.1}% 2 -\BOOKMARK [2][-]{subsection.1.2}{Pr\351sentation des outils}{section.1}% 3 -\BOOKMARK [1][-]{section.2}{Gestion des Services}{}% 4 -\BOOKMARK [1][-]{section.3}{Configuration des Services}{}% 5 -\BOOKMARK [1][-]{section.4}{Cr\351ation d'une IHM}{}% 6 -\BOOKMARK [2][-]{subsection.4.1}{Qt Creator et PyQt}{section.4}% 7 -\BOOKMARK [3][-]{subsubsection.4.1.1}{Les signaux et les slots}{subsection.4.1}% 8 -\BOOKMARK [2][-]{subsection.4.2}{Visualisation des r\351sultats}{section.4}% 9 -\BOOKMARK [2][-]{subsection.4.3}{Configuration des services}{section.4}% 10 -\BOOKMARK [2][-]{subsection.4.4}{V\351rification de l'\351tat des noeuds}{section.4}% 11 -\BOOKMARK [3][-]{subsubsection.4.4.1}{Test des noeuds via la barre de saisie}{subsection.4.4}% 12 -\BOOKMARK [3][-]{subsubsection.4.4.2}{Test des noeuds via un fichier}{subsection.4.4}% 13 -\BOOKMARK [2][-]{subsection.4.5}{Mise en place des r\351sultats d'ex\351cution dans des logs}{section.4}% 14 -\BOOKMARK [1][-]{section.5}{Sources}{}% 15 -\BOOKMARK [2][-]{subsection.5.1}{R\351f\351rences}{section.5}% 16 -\BOOKMARK [2][-]{subsection.5.2}{Arborescence des fichiers}{section.5}% 17 +\BOOKMARK [1][-]{section.1}{Introduction}{}% 1 +\BOOKMARK [2][-]{subsection.1.1}{Objectif}{section.1}% 2 +\BOOKMARK [2][-]{subsection.1.2}{Projet}{section.1}% 3 +\BOOKMARK [1][-]{section.2}{ClusterShell}{}% 4 +\BOOKMARK [2][-]{subsection.2.1}{Pr\351sentation}{section.2}% 5 +\BOOKMARK [2][-]{subsection.2.2}{Commandes CLI}{section.2}% 6 +\BOOKMARK [2][-]{subsection.2.3}{API Python}{section.2}% 7 +\BOOKMARK [1][-]{section.3}{Script gestion des services}{}% 8 +\BOOKMARK [2][-]{subsection.3.1}{Pr\351sentation}{section.3}% 9 +\BOOKMARK [1][-]{section.4}{Script avec fichier de configuration}{}% 10 +\BOOKMARK [1][-]{section.5}{Cr\351ation d'une IHM}{}% 11 +\BOOKMARK [2][-]{subsection.5.1}{Qt Creator et PyQt}{section.5}% 12 +\BOOKMARK [3][-]{subsubsection.5.1.1}{Les signaux et les slots}{subsection.5.1}% 13 +\BOOKMARK [2][-]{subsection.5.2}{Visualisation des r\351sultats}{section.5}% 14 +\BOOKMARK [2][-]{subsection.5.3}{Configuration des services}{section.5}% 15 +\BOOKMARK [2][-]{subsection.5.4}{V\351rification de l'\351tat des noeuds}{section.5}% 16 +\BOOKMARK [3][-]{subsubsection.5.4.1}{Test des noeuds via la barre de saisie}{subsection.5.4}% 17 +\BOOKMARK [3][-]{subsubsection.5.4.2}{Test des noeuds via un fichier}{subsection.5.4}% 18 +\BOOKMARK [2][-]{subsection.5.5}{Mise en place des r\351sultats d'ex\351cution dans des logs}{section.5}% 19 +\BOOKMARK [1][-]{section.6}{Sources}{}% 20 +\BOOKMARK [2][-]{subsection.6.1}{R\351f\351rences}{section.6}% 21 +\BOOKMARK [2][-]{subsection.6.2}{Arborescence des fichiers}{section.6}% 22 diff --git a/Rapport projet/rapport.pdf b/Rapport projet/rapport.pdf old mode 100644 new mode 100755 index ff45aff403109294436068ed121bad89158f6058..9c501eb36cc4c57489c176fc8fcbc9a369c58d39 GIT binary patch delta 80714 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

oiqst;I%Yv69X-63zq~4#hfmYD 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%0DbYFIx4(1iM*7#WDc6 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%0Ag~+(Hd9m&} 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 CsQ#h= diff --git a/Rapport projet/rapport.synctex.gz b/Rapport projet/rapport.synctex.gz index eb09c979a5b18d1bb059792323b59d66de02e436..dd3c2286b0161a7f589abfaecc3e36ccf5d00175 100644 GIT binary patch literal 42682 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

czU5l?9`Xs|w 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 U`RT8J`t;5J0jht4Q|~qd06kPzlK=n! literal 34857 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 E0K+^*s{jB1 diff --git a/Rapport projet/rapport.tex b/Rapport projet/rapport.tex old mode 100644 new mode 100755 index 39a5191..312e423 --- a/Rapport projet/rapport.tex +++ b/Rapport projet/rapport.tex @@ -14,6 +14,7 @@ + %% Mise en page (marges) % (NON MODIFIABLE) \geometry{hmargin=15mm,vmargin=20mm} @@ -55,7 +56,7 @@ \vskip 10mm \begin{figure}[H] - \centerline{\includegraphics[scale=0.4]{logoUEVE.png}} + \centerline{\includegraphics[scale=0.4]{LogoUEVE.png}} \end{figure} @@ -105,25 +106,76 @@ \subsection{Objectif} \\ Ce projet nous demande de réalisé et de développer un outils en ligne de commande de gestion distribué des service de systèmes permettant d'administrer ces services sur plusieurs nœuds, et cela en utilisant l'API Python ClusterShell. \\ -Nous allons donc dans un premier temps implémenter une version basique de gestion de services avec des fonctionnalités simple comme : start, stop, restart , etc.. sur un ensemble de nœuds distant. Puis une fois cette base réalisé, nous allons mettre en place une configuration statique de la répartition des services grâce à des fichiers. Et pour finir nous développerons une IHM à partir des éléments déjà crée afin de parfaire l'outil de gestion des services distribué. -\subsection{Présentation des outils} + +\subsection{Projet} \label{sub:1.2} + +Ce projet est composé de 3 parties distinctes: +\begin{itemize} +\item Une version simple en ligne de commande +\item Une version accueillant un fichier de configuration +\item Une version avec une interface graphique +\end{itemize} +\bigbreak + +Les deux scripts ainsi que l'interface graphique seront entièrement programmé en python version 2.7. +\smallbreak +Nous allons donc dans un premier temps implémenter une version basique de gestion de services avec des fonctionnalités simple comme : start, stop, restart , etc.. sur un ensemble de nœuds distant. Puis une fois cette base réalisé, nous allons mettre en place une configuration statique de la répartition des services grâce à des fichiers. Et pour finir nous développerons une IHM à partir des éléments déjà crée afin de parfaire l'outil de gestion des services distribué. +\pagebreak + +\section{ClusterShell} +\label{sec:section2} +\subsection{Présentation} +\label{sub:2.1} + +ClusterShell est un outil d'administration distribuée. Il permet d'exécuter des commandes à distance sur un ensemble n de noeuds. +\smallbreak +Pour que ClusterShell fonctionne, il faut installer le paquet "clustershell" coté master (celui qui va administrer les noeuds à distance). +Cette outil est agent-less coté client, c'est à dire qu'il n'y a pas de service à installé sur les noeuds à administrer, ClusterShell nécessite seulement au préalable d'avoir une connexion SSH valide (accès avec échanges de clés sans mot de passe) sur chacun des noeuds qu'il va administrer. + +\subsection{Commandes CLI} +\label{sub:2.2} Commençons tout d'abord par définir les 3 fonctionnalités de la bibliothèques de ClusterShell définit plus haut:crush,nodeset et clubak. \begin{itemize} -\item Nodeset : Permet la création et la manipulation de liste de nœuds . En effet on peut créer des listes machines ainsi que des ranges de nœuds, on peut effectuer plusieurs opérations sur ces listes ( union, exclusion, intersection , etc...) -\item Clush : Permet l'exécution des commandes en parallèle sur des machines distantes, prends également en charge les groupes. +\item Nodeset : Permet la création et la manipulation de liste de nœuds . En effet on peut créer des listes machines ainsi que des ranges de nœuds, on peut effectuer plusieurs opérations sur ces listes ( union, exclusion, intersection , etc...). Cela facilite fortement la manipulation des noeuds. +\item Clush : Permet l'exécution des commandes en parallèle sur des noeuds distants, prends également en charge les groupes de noeuds. \item Clubak : Regroupement de sorties standards qui permet de présenter de manière synthétique un résultat d'exécution un peu trop verbeux. -\end{itemize}\pagebreak +\end{itemize} -\section{Gestion des Services} -\label{sec:section2} +\subsection{API Python} +\label{sub:2.3} +ClusterShell délivre une API python permettant de manipuler cette outil dans nos propres scripts python. +\smallbreak +Pour utiliser cette API, il suffit de télécharger le paquet "clustershell". +\smallbreak +Par la suite, il suffit d'intégrer l'api python ClusterShell à notre script avec cette ligne: -\section{Configuration des Services} +\begin{figure}[hbtp] +\centering +\includegraphics[scale=0.7]{from_clustershell.png} +\caption{Import} +\end{figure} + +\pagebreak +\section{Script gestion des services} \label{sec:section3} +\subsection{Présentation} +\label{sub:3.1} -\section{Création d'une IHM} +Cette première partie consiste créer un script en python permettant d'utiliser les fonctionnalités de base des services, en étendant cette fonctionnalité de façon distribuée sur un ensemble choisi de noeuds. +Pour ce faire, on utilise l'api python Clustershell qui va nous permettre de créer un script pouvant effectuer ces actions. + + +\pagebreak + + +\section{Script avec fichier de configuration} \label{sec:section4} +\pagebreak + +\section{Création d'une IHM} +\label{sec:section5} Pour la création d'une interface graphique, nous nous sommes tournés vers l'environnement de développement Qt. Qt est basé sur le langage C++ pour créer ses IHM. Cependant il existe le module PyQt permettant de programmer en python une interface graphique aisément. \subsection{Qt Creator et PyQt} Au départ, on utilise Qt Creator pour pouvoir créer les fenêtres avec tous les composants nécessaires. Lorsque l'on créé une fenêtre, Qt nous génère un fichier \textbf{.ui}. A l'aide de l'utilitaire \textbf{pyuic}, on peut convertir ce fichier en python. @@ -209,7 +261,7 @@ \subsubsection{Test des noeuds via un fichier} \subsection{Mise en place des résultats d'exécution dans des logs} \section{Sources} -\label{sec:section5} +\label{sec:section6} \subsection{Références} \textbf{Nodeset:} \url{http://clustershell.readthedocs.io/en/latest/api/NodeSet.html}\\ \textbf{Task:} \url{http://clustershell.readthedocs.io/en/latest/api/Task.html}\\ diff --git a/Rapport projet/rapport.toc b/Rapport projet/rapport.toc old mode 100644 new mode 100755 index 68c372e..f8f931e --- a/Rapport projet/rapport.toc +++ b/Rapport projet/rapport.toc @@ -1,18 +1,23 @@ -\select@language {french} -\contentsline {section}{\numberline {1}Introduction}{3}{section.1} -\contentsline {subsection}{\numberline {1.1}Objectif}{3}{subsection.1.1} -\contentsline {subsection}{\numberline {1.2}Pr\IeC {\'e}sentation des outils}{3}{subsection.1.2} -\contentsline {section}{\numberline {2}Gestion des Services}{4}{section.2} -\contentsline {section}{\numberline {3}Configuration des Services}{4}{section.3} -\contentsline {section}{\numberline {4}Cr\IeC {\'e}ation d'une IHM}{4}{section.4} -\contentsline {subsection}{\numberline {4.1}Qt Creator et PyQt}{4}{subsection.4.1} -\contentsline {subsubsection}{\numberline {4.1.1}Les signaux et les slots}{4}{subsubsection.4.1.1} -\contentsline {subsection}{\numberline {4.2}Visualisation des r\IeC {\'e}sultats}{5}{subsection.4.2} -\contentsline {subsection}{\numberline {4.3}Configuration des services}{6}{subsection.4.3} -\contentsline {subsection}{\numberline {4.4}V\IeC {\'e}rification de l'\IeC {\'e}tat des noeuds}{6}{subsection.4.4} -\contentsline {subsubsection}{\numberline {4.4.1}Test des noeuds via la barre de saisie}{6}{subsubsection.4.4.1} -\contentsline {subsubsection}{\numberline {4.4.2}Test des noeuds via un fichier}{8}{subsubsection.4.4.2} -\contentsline {subsection}{\numberline {4.5}Mise en place des r\IeC {\'e}sultats d'ex\IeC {\'e}cution dans des logs}{8}{subsection.4.5} -\contentsline {section}{\numberline {5}Sources}{8}{section.5} -\contentsline {subsection}{\numberline {5.1}R\IeC {\'e}f\IeC {\'e}rences}{8}{subsection.5.1} -\contentsline {subsection}{\numberline {5.2}Arborescence des fichiers}{9}{subsection.5.2} +\select@language {french} +\contentsline {section}{\numberline {1}Introduction}{3}{section.1} +\contentsline {subsection}{\numberline {1.1}Objectif}{3}{subsection.1.1} +\contentsline {subsection}{\numberline {1.2}Projet}{3}{subsection.1.2} +\contentsline {section}{\numberline {2}ClusterShell}{4}{section.2} +\contentsline {subsection}{\numberline {2.1}Pr\IeC {\'e}sentation}{4}{subsection.2.1} +\contentsline {subsection}{\numberline {2.2}Commandes CLI}{4}{subsection.2.2} +\contentsline {subsection}{\numberline {2.3}API Python}{4}{subsection.2.3} +\contentsline {section}{\numberline {3}Script gestion des services}{5}{section.3} +\contentsline {subsection}{\numberline {3.1}Pr\IeC {\'e}sentation}{5}{subsection.3.1} +\contentsline {section}{\numberline {4}Script avec fichier de configuration}{6}{section.4} +\contentsline {section}{\numberline {5}Cr\IeC {\'e}ation d'une IHM}{7}{section.5} +\contentsline {subsection}{\numberline {5.1}Qt Creator et PyQt}{7}{subsection.5.1} +\contentsline {subsubsection}{\numberline {5.1.1}Les signaux et les slots}{7}{subsubsection.5.1.1} +\contentsline {subsection}{\numberline {5.2}Visualisation des r\IeC {\'e}sultats}{8}{subsection.5.2} +\contentsline {subsection}{\numberline {5.3}Configuration des services}{9}{subsection.5.3} +\contentsline {subsection}{\numberline {5.4}V\IeC {\'e}rification de l'\IeC {\'e}tat des noeuds}{9}{subsection.5.4} +\contentsline {subsubsection}{\numberline {5.4.1}Test des noeuds via la barre de saisie}{9}{subsubsection.5.4.1} +\contentsline {subsubsection}{\numberline {5.4.2}Test des noeuds via un fichier}{11}{subsubsection.5.4.2} +\contentsline {subsection}{\numberline {5.5}Mise en place des r\IeC {\'e}sultats d'ex\IeC {\'e}cution dans des logs}{11}{subsection.5.5} +\contentsline {section}{\numberline {6}Sources}{11}{section.6} +\contentsline {subsection}{\numberline {6.1}R\IeC {\'e}f\IeC {\'e}rences}{11}{subsection.6.1} +\contentsline {subsection}{\numberline {6.2}Arborescence des fichiers}{12}{subsection.6.2} diff --git a/Rapport projet/signal_slot.jpg b/Rapport projet/signal_slot.jpg old mode 100644 new mode 100755 diff --git a/Script_conf/example.yaml b/Script_conf/example.yaml old mode 100644 new mode 100755 diff --git a/Script_conf/supply.py b/Script_conf/supply.py old mode 100644 new mode 100755 index 32e0209..0387830 --- a/Script_conf/supply.py +++ b/Script_conf/supply.py @@ -1,59 +1,59 @@ -#!/usr/bin/env python -#coding: utf8 - -import sys,os - -BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) - - -def has_colours(stream): - if not hasattr(stream, "isatty"): - return False - if not stream.isatty(): - return False # auto color only on TTYs - try: - import curses - curses.setupterm() - return curses.tigetnum("colors") > 2 - except: - # guess false in case of error - return False -has_colours = has_colours(sys.stdout) - - -def printout(text, colour=WHITE): - if has_colours: - seq = "\x1b[0;%dm" % (30+colour) + text + "\x1b[0m" - sys.stdout.write(seq) - else: - sys.stdout.write(text) - - -def getTerminalSize(): - env = os.environ - def ioctl_GWINSZ(fd): - try: - import fcntl, termios, struct, os - cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, - '1234')) - except: - return - return cr - cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) - if not cr: - try: - fd = os.open(os.ctermid(), os.O_RDONLY) - cr = ioctl_GWINSZ(fd) - os.close(fd) - except: - pass - if not cr: - cr = (env.get('LINES', 25), env.get('COLUMNS', 80)) - - ### Use get(key[, default]) instead of a try/catch - #try: - # cr = (env['LINES'], env['COLUMNS']) - #except: - # cr = (25, 80) - return int(cr[1]), int(cr[0]) - +#!/usr/bin/env python +#coding: utf8 + +import sys,os + +BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) + + +def has_colours(stream): + if not hasattr(stream, "isatty"): + return False + if not stream.isatty(): + return False # auto color only on TTYs + try: + import curses + curses.setupterm() + return curses.tigetnum("colors") > 2 + except: + # guess false in case of error + return False +has_colours = has_colours(sys.stdout) + + +def printout(text, colour=WHITE): + if has_colours: + seq = "\x1b[0;%dm" % (30+colour) + text + "\x1b[0m" + sys.stdout.write(seq) + else: + sys.stdout.write(text) + + +def getTerminalSize(): + env = os.environ + def ioctl_GWINSZ(fd): + try: + import fcntl, termios, struct, os + cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, + '1234')) + except: + return + return cr + cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) + if not cr: + try: + fd = os.open(os.ctermid(), os.O_RDONLY) + cr = ioctl_GWINSZ(fd) + os.close(fd) + except: + pass + if not cr: + cr = (env.get('LINES', 25), env.get('COLUMNS', 80)) + + ### Use get(key[, default]) instead of a try/catch + #try: + # cr = (env['LINES'], env['COLUMNS']) + #except: + # cr = (25, 80) + return int(cr[1]), int(cr[0]) + diff --git a/Script_conf/supply.pyc b/Script_conf/supply.pyc index 92d4b512680964eddd61358648190cfc9c476dbf..1a9c79546eefffada0a65e47e2bcaccd789287e8 100644 GIT binary patch delta 128 zcmaFNH=m!K`7{A&TttQW9)Zh+IF3Kz@iBHbYOWS;ekr|utdnRorOx2T} RSZ`qwbzwV;MbwgA3jn_BD@y{A&T^(H&AX>7j8$OL0@Fl#YEL?@@S-h{GB+0H;&W$c;& DmxB_p diff --git a/Script_conf/yamlscript.py b/Script_conf/yamlscript.py old mode 100644 new mode 100755 index 52247b7..886ec88 --- a/Script_conf/yamlscript.py +++ b/Script_conf/yamlscript.py @@ -1,216 +1,216 @@ -#!/usr/bin/env python -#coding: utf8 -# -# Script.yaml: -# --- -# - service1,[service2,...]: -# state: [start,stop,restart,reload] -# nodes: node1,[node2,...] -# depend: service -# Exemple: -# --- -# - cron,nginx: -# state: restart -# nodes: node[50-100] -# - proxmox: -# state: stop -# nodes: node[1-10] -# depend: vsphere -# -# ./yamlscript example.yaml [-force] -# -force: Bypass la confirmation humaine, utile si on veut automatiser par exemple -# Il est fortement conseiller de tester son fichier de configuration une fois avant de l'automatiser. - -import yaml,sys,os -from ClusterShell.Task import task_self, NodeSet -from supply import has_colours,printout,getTerminalSize - -BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) - -def debug(doc): - print("------------") ##################### - print("nombre de service: %d" % len(doc)) # # - print(type(doc)) # Section debugging # - print(doc) # # - print(doc[0]) - print(len(doc)) - print(doc[0].keys()[0]) - print(doc[0].get(doc[0].keys()[0]).get("state")) - print(len(doc)) - print("------------") ##################### - return() - - -def check_service(doc): - if(isinstance(doc,list)==True and len(doc)>=1): # vérification de la structure du fichier YAML - print("D'après le fichier \"%s\", les services concernés sont:" % sys.argv[1]) - return(True) - else: - print("/!\\ Erreur syntaxe dans \"%s\" /!\\" % sys.argv[1]) - return(False) - -def check_attribut(doc,service): - for i in range(0,len(service)): # vérification des attributs de chaque service - name=service[i] - if(doc[i].get(name).has_key("state")==False): - print("/!\\ attribut \"state\" manquant pour %d: %s /!\\" % (i,name)) - return(False) - if not(doc[i].get(name).get("state") in ['start','stop','status','reload','restart']): - print("/!\\ attribut \"state\" doit être [start/stop/status/reload] pour %d: %s /!\\" % (i,name)) - return(False) - if(doc[i].get(name).has_key("nodes")==False or doc[i].get(name).get("nodes")==None): - print("/!\\ attribut \"nodes\" manquant pour %d: %s /!\\" % (i,name)) - return(False) - try: # vérifie les erreurs de syntaxe pour les nodes - nodeset=NodeSet(doc[i].get(name).get("nodes")) - except: - print("/!\\ Problème avec la syntaxe de \"%s\" pour %d: %s /!\\" % (doc[i].get(name).get("nodes"),i,name)) - print("\n") - return(False) - return(True) - -def check_depend(doc,name,i): - if(doc[i].get(name).get("depend")!=None): - serv=doc[i].get(name).get("depend") - serv_split=serv.split(",") - taske = task_self() - nodes=doc[i].get(name).get("nodes") - # out="" - # output="" - result=[] - for m in range(0,len(serv_split)): - out="" - output="" - cli="service %s start" % serv_split[m] - taske.shell(cli, nodes=nodes) - taske.run() - for output, nodelist in taske.iter_buffers(): - result.append(serv_split[m]) - error_nodes=NodeSet.fromlist(nodelist) - else: - return(True,0,0) - if(len(result)==0): - return(True,0,0) - else: - return(False,result,error_nodes) - - -def add_key(doc): # remet les services dans le bon ordre - service=[] - compt=0 - for i in range(0,len(doc)): - print(" %s: %s" % (compt,doc[i].keys()[0])) - compt +=1 - service.append(doc[i].keys()[0]) - print("") - return(service) - -def clustershell(doc,service): # Commandes distribuées - recap=[] - for i in range(0,len(service)): - task = task_self() - name=service[i] - name_split=service[i].split(",") - state=doc[i].get(name).get("state") - nodes=doc[i].get(name).get("nodes") - x,y=getTerminalSize() - string="TASK: [%s]" % name - star= '*' * (x-len(string)) - print("%s %s" % (string,star)) - test_depend,result,error_nodes=check_depend(doc,name,i) - if(test_depend==True): - for n in range(0,len(name_split)): - out="" - output="" - cli="service %s %s" % (name_split[n],state) - task.shell(cli, nodes=nodes) - task.run() - space=' ' * (15-len(name_split[n])) - printout("%s%s: state=%s nodes=%s\n" % (name_split[n],space,state,nodes), YELLOW) - for output, nodelist in task.iter_buffers(): - printout('Error: %s: %s\n' % (NodeSet.fromlist(nodelist), output), RED) - recap.append(0) - if(out==output): - printout("OK\n", GREEN) - recap.append(1) - print("") - else: - space=' ' * (15-len(name)) - printout("%s%s: state=%s nodes=%s\n" % (name,space,state,nodes), YELLOW) - printout("Error depend %s: le(s) service(s) %s n'est(sont) pas activé(s) ou installé(s)\n" % (error_nodes,result), RED) - print("") - for yop in range(0,len(name_split)): - recap.append(0) - return recap - -def recap(service,recap): - x,y=getTerminalSize() - recaptext="RECAP" - stars= '*' * (x-len(recaptext)-1) - print("%s %s" % (recaptext,stars)) - z=0 - for g in range(0,len(service)): - name=service[g] - name_split=service[g].split(",") - for p in range(0,len(name_split)): - if(recap[z]==1): - recap_value="[%s]%s" % (name,name_split[p]) - space=' ' * (30-len(recap_value)) - recap_final="%s %s:" % (recap_value,space) - print(recap_final), - printout(" ok=1", GREEN) - print(" failed=0") - else: - recap_value="[%s]%s" % (name,name_split[p]) - space=' ' * (30-len(recap_value)) - recap_final="%s %s: ok=0" % (recap_value,space) - print(recap_final), - printout(" failed=1\n", RED) - z=z+1 - - print("") - -def main(): - - service=[] - rep="" - - if(len(sys.argv)>=2): - if(os.path.isfile(sys.argv[1])==True): # vérifie l'existence du fichier yaml - fichier = sys.argv[1] - with open(fichier,'r') as stream: - try: - doc=yaml.safe_load(stream) - #debug(doc) # information (optionnel) - if(check_service(doc)): # Contrôle les services - service=add_key(doc) # Met les services en état - passe=0 - for r in sys.argv: - if(r=="-force"): - passe=1 - if(passe==0): - while(rep !='y' and rep !='n'): - rep = raw_input("Confirmer (y/n) : ") - if(rep=='y'): - print "" - if(check_attribut(doc,service)): # Contrôle les attributs des services - recapitulatif=clustershell(doc,service) - recap(service,recapitulatif) - print "" - else: - if(check_attribut(doc,service)): - recapitulatif=clustershell(doc,service) - recap(service,recapitulatif) - print "" - - except yaml.YAMLError as exc: - print(exc) - else: - print("\"%s\" n'existe pas" % sys.argv[1]) - - else: - print("/!\\ fichier.yaml en argument requis /!\\") - - -if __name__ == '__main__': - main() +#!/usr/bin/env python +#coding: utf8 +# +# Script.yaml: +# --- +# - service1,[service2,...]: +# state: [start,stop,restart,reload] +# nodes: node1,[node2,...] +# depend: service +# Exemple: +# --- +# - cron,nginx: +# state: restart +# nodes: node[50-100] +# - proxmox: +# state: stop +# nodes: node[1-10] +# depend: vsphere +# +# ./yamlscript example.yaml [-force] +# -force: Bypass la confirmation humaine, utile si on veut automatiser par exemple +# Il est fortement conseiller de tester son fichier de configuration une fois avant de l'automatiser. + +import yaml,sys,os +from ClusterShell.Task import task_self, NodeSet +from supply import has_colours,printout,getTerminalSize + +BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) + +def debug(doc): + print("------------") ##################### + print("nombre de service: %d" % len(doc)) # # + print(type(doc)) # Section debugging # + print(doc) # # + print(doc[0]) + print(len(doc)) + print(doc[0].keys()[0]) + print(doc[0].get(doc[0].keys()[0]).get("state")) + print(len(doc)) + print("------------") ##################### + return() + + +def check_service(doc): + if(isinstance(doc,list)==True and len(doc)>=1): # vérification de la structure du fichier YAML + print("D'après le fichier \"%s\", les services concernés sont:" % sys.argv[1]) + return(True) + else: + print("/!\\ Erreur syntaxe dans \"%s\" /!\\" % sys.argv[1]) + return(False) + +def check_attribut(doc,service): + for i in range(0,len(service)): # vérification des attributs de chaque service + name=service[i] + if(doc[i].get(name).has_key("state")==False): + print("/!\\ attribut \"state\" manquant pour %d: %s /!\\" % (i,name)) + return(False) + if not(doc[i].get(name).get("state") in ['start','stop','status','reload','restart']): + print("/!\\ attribut \"state\" doit être [start/stop/status/reload] pour %d: %s /!\\" % (i,name)) + return(False) + if(doc[i].get(name).has_key("nodes")==False or doc[i].get(name).get("nodes")==None): + print("/!\\ attribut \"nodes\" manquant pour %d: %s /!\\" % (i,name)) + return(False) + try: # vérifie les erreurs de syntaxe pour les nodes + nodeset=NodeSet(doc[i].get(name).get("nodes")) + except: + print("/!\\ Problème avec la syntaxe de \"%s\" pour %d: %s /!\\" % (doc[i].get(name).get("nodes"),i,name)) + print("\n") + return(False) + return(True) + +def check_depend(doc,name,i): + if(doc[i].get(name).get("depend")!=None): + serv=doc[i].get(name).get("depend") + serv_split=serv.split(",") + taske = task_self() + nodes=doc[i].get(name).get("nodes") + # out="" + # output="" + result=[] + for m in range(0,len(serv_split)): + out="" + output="" + cli="service %s start" % serv_split[m] + taske.shell(cli, nodes=nodes) + taske.run() + for output, nodelist in taske.iter_buffers(): + result.append(serv_split[m]) + error_nodes=NodeSet.fromlist(nodelist) + else: + return(True,0,0) + if(len(result)==0): + return(True,0,0) + else: + return(False,result,error_nodes) + + +def add_key(doc): # remet les services dans le bon ordre + service=[] + compt=0 + for i in range(0,len(doc)): + print(" %s: %s" % (compt,doc[i].keys()[0])) + compt +=1 + service.append(doc[i].keys()[0]) + print("") + return(service) + +def clustershell(doc,service): # Commandes distribuées + recap=[] + for i in range(0,len(service)): + task = task_self() + name=service[i] + name_split=service[i].split(",") + state=doc[i].get(name).get("state") + nodes=doc[i].get(name).get("nodes") + x,y=getTerminalSize() + string="TASK: [%s]" % name + star= '*' * (x-len(string)) + print("%s %s" % (string,star)) + test_depend,result,error_nodes=check_depend(doc,name,i) + if(test_depend==True): + for n in range(0,len(name_split)): + out="" + output="" + cli="service %s %s" % (name_split[n],state) + task.shell(cli, nodes=nodes) + task.run() + space=' ' * (15-len(name_split[n])) + printout("%s%s: state=%s nodes=%s\n" % (name_split[n],space,state,nodes), YELLOW) + for output, nodelist in task.iter_buffers(): + printout('Error: %s: %s\n' % (NodeSet.fromlist(nodelist), output), RED) + recap.append(0) + if(out==output): + printout("OK\n", GREEN) + recap.append(1) + print("") + else: + space=' ' * (15-len(name)) + printout("%s%s: state=%s nodes=%s\n" % (name,space,state,nodes), YELLOW) + printout("Error depend %s: le(s) service(s) %s n'est(sont) pas activé(s) ou installé(s)\n" % (error_nodes,result), RED) + print("") + for yop in range(0,len(name_split)): + recap.append(0) + return recap + +def recap(service,recap): + x,y=getTerminalSize() + recaptext="RECAP" + stars= '*' * (x-len(recaptext)-1) + print("%s %s" % (recaptext,stars)) + z=0 + for g in range(0,len(service)): + name=service[g] + name_split=service[g].split(",") + for p in range(0,len(name_split)): + if(recap[z]==1): + recap_value="[%s]%s" % (name,name_split[p]) + space=' ' * (30-len(recap_value)) + recap_final="%s %s:" % (recap_value,space) + print(recap_final), + printout(" ok=1", GREEN) + print(" failed=0") + else: + recap_value="[%s]%s" % (name,name_split[p]) + space=' ' * (30-len(recap_value)) + recap_final="%s %s: ok=0" % (recap_value,space) + print(recap_final), + printout(" failed=1\n", RED) + z=z+1 + + print("") + +def main(): + + service=[] + rep="" + + if(len(sys.argv)>=2): + if(os.path.isfile(sys.argv[1])==True): # vérifie l'existence du fichier yaml + fichier = sys.argv[1] + with open(fichier,'r') as stream: + try: + doc=yaml.safe_load(stream) + #debug(doc) # information (optionnel) + if(check_service(doc)): # Contrôle les services + service=add_key(doc) # Met les services en état + passe=0 + for r in sys.argv: + if(r=="-force"): + passe=1 + if(passe==0): + while(rep !='y' and rep !='n'): + rep = raw_input("Confirmer (y/n) : ") + if(rep=='y'): + print "" + if(check_attribut(doc,service)): # Contrôle les attributs des services + recapitulatif=clustershell(doc,service) + recap(service,recapitulatif) + print "" + else: + if(check_attribut(doc,service)): + recapitulatif=clustershell(doc,service) + recap(service,recapitulatif) + print "" + + except yaml.YAMLError as exc: + print(exc) + else: + print("\"%s\" n'existe pas" % sys.argv[1]) + + else: + print("/!\\ fichier.yaml en argument requis /!\\") + + +if __name__ == '__main__': + main() diff --git a/Script_simple/script.py b/Script_simple/script.py old mode 100644 new mode 100755 index a458fc0..659afe4 --- a/Script_simple/script.py +++ b/Script_simple/script.py @@ -1,36 +1,37 @@ -#!/usr/bin/env python -# utilisation: -# ./script.py noeuds service1 commande service2 commande ... - -import sys -from ClusterShell.Task import task_self, NodeSet - - - -def main(): - - argument = [] - for arg in sys.argv: - argument.append(arg) - - #print(len(argument)) - if len(argument) == 1: - print "Veuillez rentrer des parametres" - - else: - for i in range(2,len(argument)): - if i%2 == 0: # pour chaque chiffre pair - if(argument[i+1] == 'start' or 'stop' or 'status' or 'restart' or 'reload'): - task = task_self() - cli="service %s %s"% (argument[i], argument[i+1]) - task.shell(cli, nodes=argument[1]) - task.run() - for output, nodelist in task.iter_buffers(): - print '\n' - print '%s: %s' % (NodeSet.fromlist(nodelist), output) - -if __name__ == '__main__': - main() - - - +#!/usr/bin/env python2.7 +#coding: utf8 +# utilisation: +# ./script.py noeuds service1 commande service2 commande +# ./script.py node[1-3] cron stop nginx restart + +import sys +from ClusterShell.Task import task_self, NodeSet + +def main(): + if len(sys.argv) <= 3: + print "Veuillez entrer des paramètres (./script.py node[1-3] cron stop)" + else: + if((len(sys.argv)%2)==0): + try: # vérifie les erreurs de syntaxe pour les nodes + nodeset=NodeSet(sys.argv[1]) + except: + print("Erreur: Problème avec la syntaxe \"%s\"" % sys.argv[1]) + return + for i in range(2,len(sys.argv)): + if i%2 == 0: # pour chaque chiffre pair + if(sys.argv[i+1] == 'start' or 'stop' or 'status' or 'restart' or 'reload'): + task = task_self() + cli="service %s %s"% (sys.argv[i], sys.argv[i+1]) + task.shell(cli, nodes=sys.argv[1]) + task.run() + for output, nodelist in task.iter_buffers(): + print '\n' + print '%s: %s' % (NodeSet.fromlist(nodelist), output) + else: + print("Erreur: Veuillez vérifier le nombre de paramètres") + +if __name__ == '__main__': + main() + + + diff --git a/clustershell_IHM/.cluster.py.swo b/clustershell_IHM/.cluster.py.swo old mode 100644 new mode 100755 diff --git a/clustershell_IHM/.cluster.py.swp b/clustershell_IHM/.cluster.py.swp old mode 100644 new mode 100755 diff --git a/clustershell_IHM/IHM.py b/clustershell_IHM/IHM.py old mode 100644 new mode 100755 index ad66cb8..7075589 --- a/clustershell_IHM/IHM.py +++ b/clustershell_IHM/IHM.py @@ -1,272 +1,272 @@ -#!/usr/bin/env python2.7 -# -*- coding: utf-8 -*- - - -from PyQt4 import QtGui, QtCore -from PyQt4.QtCore import pyqtSlot -from PyQt4.QtGui import * - -from ClusterShell.Task import task_self, NodeSet -from cluster import clustershell,fichier,typeservice,recap_cluster,fichier2,check_service2,check_attribut2 - -try: - _fromUtf8 = QtCore.QString.fromUtf8 -except AttributeError: - _fromUtf8 = lambda s: s - -import sys,datetime,os,yaml - - -import clustershell_IHM,configuration_IHM,etatnoeud_IHM,check_noeud -from ClusterShell.Task import task_self, NodeSet - - -class clustershell_IHM(QtGui.QMainWindow, clustershell_IHM.Ui_MainWindow): - list_service=[] - list_recap=[] - def __init__(self, parent=None): - super(clustershell_IHM, self).__init__(parent) - self.setupUi(self) - #self.label.setText("test") - self.progressBar.hide() - def main(self): - self.show() - -class configuration_IHM(QtGui.QWidget, configuration_IHM.Ui_Form): - def __init__(self, parent=None): - super(configuration_IHM, self).__init__(parent) - self.setupUi(self) - self.comboBox.addItem("start") - self.comboBox.addItem("stop") - self.comboBox.addItem("restart") - self.comboBox.addItem("reload") - def main(self): - self.show() - -class etatnoeud_IHM(QtGui.QWidget, etatnoeud_IHM.Ui_Form): - sortie = [] - def __init__(self, parent=None): - super(etatnoeud_IHM, self).__init__(parent) - self.setupUi(self) - def main(self): - self.show() - - - - - - -if __name__=='__main__': - app=QtGui.QApplication(sys.argv) - clustershell_IHM = clustershell_IHM() - configuration_IHM = configuration_IHM() - etatnoeud_IHM = etatnoeud_IHM() - - - #actions boutons - @pyqtSlot() - def config(): - configuration_IHM.lineEdit.clear() - configuration_IHM.lineEdit_2.clear() - configuration_IHM.lineEdit_3.clear() - configuration_IHM.pushButton_2.setEnabled(False) - configuration_IHM.main() - - def on_click_add_service(): - ok=0 - if(configuration_IHM.lineEdit.text()!=""): - name=configuration_IHM.lineEdit.text() - dependance=configuration_IHM.lineEdit_3.text() - action=configuration_IHM.comboBox.currentText() - if(configuration_IHM.lineEdit_2.text()!=""): - try: - noeuds=configuration_IHM.lineEdit_2.text() - nodeset=NodeSet(str(noeuds)) - ok=1 - except: - noeuds="" - QMessageBox.about(configuration_IHM,"Erreur","Syntaxe noeuds incorrect") - if( ok==1 and name!="" and noeuds!="" and dependance!=""): - configuration_IHM.listWidget.addItem("%d: %s %s ON %s (depend %s)"%(configuration_IHM.listWidget.count()+1,name,action,noeuds,dependance)) - clustershell_IHM.list_service.append(typeservice(name,action,noeuds,dependance)) - print("c'est cool") - if(ok==1 and name!="" and noeuds!="" and dependance==""): - configuration_IHM.listWidget.addItem("%d: %s %s ON %s"%(configuration_IHM.listWidget.count()+1,name,action,noeuds)) - clustershell_IHM.list_service.append(typeservice(name,action,noeuds)) - else: - QMessageBox.about(configuration_IHM,"Erreur","Attribut noeuds manquant") - else: - QMessageBox.about(configuration_IHM,"Erreur","Attribut service manquant") - - - def on_click_delete_service(): - service_number=configuration_IHM.listWidget.currentRow() - configuration_IHM.listWidget.takeItem(service_number) - del clustershell_IHM.list_service[configuration_IHM.listWidget.currentRow()] - configuration_IHM.pushButton_2.setEnabled(False) - - - def on_click_ouvre_etat(): - etatnoeud_IHM.main() - - def check_etat_noeud(): - etatnoeud_IHM.lineEdit.clear() - etatnoeud_IHM.listWidget.clear() - etatnoeud_IHM.listWidget_2.clear() - etatnoeud_IHM.listWidget_3.clear() - - i = 1 - msg = QMessageBox() - msg.setIcon(QMessageBox.Warning) - msg.setWindowTitle("Erreur") - noeuds = etatnoeud_IHM.lineEdit.text() - if (noeuds!=""): - try: - nodeset = NodeSet(str(noeuds)) - print nodeset - for node in nodeset: - cli = "echo Hello" - taske = task_self() - taske.shell(cli, nodes=node) - taske.run() - - for output, nodelist in task_self().iter_buffers(): - if(output=="Hello"): - - etatnoeud_IHM.listWidget.insertItem(i,"%s" % (NodeSet.fromlist(nodelist))) - i = i + 1 - - else: - etatnoeud_IHM.listWidget_2.insertItem(i,"%s" % (NodeSet.fromlist(nodelist))) - i = i + 1 - etatnoeud_IHM.sortie.append(output) - print "output: %s" % output - - except: - msg.setText("Oups ! Probleme") - msg.exec_() - - else: - msg.setText("Veuillez rentrer un ou plusieur noeuds") - msg.setDetailedText("node1,node2\nnode[1-5]\nnode1,node[5-6]\netc...") - msg.exec_() - - def close_window_etat(): - etatnoeud_IHM.close() - - def open_file_browsers(): - fichier2(etatnoeud_IHM) - - - def on_item_clicked(): - #etatnoeud_IHM.setEnabled(True) - index = etatnoeud_IHM.listWidget_2.currentRow() - print "index: %s" % index - etatnoeud_IHM.listWidget_3.clear() - etatnoeud_IHM.listWidget_3.insertItem(1,str(etatnoeud_IHM.sortie[index])) - - def close(): - clustershell_IHM.label.setText("%d action(s)" % configuration_IHM.listWidget.count()) - if(configuration_IHM.listWidget.count()==0): - clustershell_IHM.pushButton_2.setEnabled(False) - else: - clustershell_IHM.pushButton_2.setEnabled(True) - configuration_IHM.close() - - def importer(): - fichier(clustershell_IHM,configuration_IHM) - - def lancer(): - del(clustershell_IHM.list_recap[:]) - clustershell_IHM.listWidget.clear() - clustershell_IHM.progressBar.reset() - clustershell_IHM.progressBar.update() - clustershell_IHM.progressBar.show() - for i in range(0,len(clustershell_IHM.list_service)): - nom=clustershell_IHM.list_service[i].nom - action=clustershell_IHM.list_service[i].action - noeuds=clustershell_IHM.list_service[i].noeuds - dependance=clustershell_IHM.list_service[i].dependance - if(clustershell_IHM.list_service[i].dependance==""): - #clustershell_IHM.listWidget.insertItem(clustershell_IHM.listWidget.count()+1,"%s %s ON %s" % (nom,action,noeuds)) - clustershell_IHM.listWidget.addItem("%s %s ON %s *********************************" % (nom,action,noeuds)) - print("%s %s ON %s *********************************" % (nom,action,noeuds)) - else: - clustershell_IHM.listWidget.addItem("%s %s ON %s (depend: %s) ********************" % (nom,action,noeuds,dependance)) - print("%s %s ON %s (depend: %s) ********************" % (nom,action,noeuds,dependance)) - - - clustershell(clustershell_IHM,clustershell_IHM.list_service,i) - clustershell_IHM.progressBar.setValue((100/(len(clustershell_IHM.list_service))*(i+1))) - clustershell_IHM.progressBar.update() - clustershell_IHM.progressBar.setValue(100) - clustershell_IHM.progressBar.update() - - def resultat(): - print("") - if(len(clustershell_IHM.list_recap)>0): - for b in clustershell_IHM.list_recap: - if(b.resultat==1): - print("OK: [%s] %s: %s" % (b.nom,b.nom_split,b.noeuds)) - else: - if(b.type==1): - print("FAIL: [%s] %s: %s DEPENDANCE FAIL" % (b.nom,b.nom_split,b.noeuds)) - print("Output: %s" % b.output) - elif(b.type==2): - print("FAIL: [%s] %s: %s SERVICE FAIL" % (b.nom,b.nom_split,b.noeuds)) - print("Output: %s" % b.output) - print("") - date=datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S') - print type(date) - if(len(clustershell_IHM.list_recap)>0): - with open("log_%s" % date,'w') as fich: - for b in clustershell_IHM.list_recap: - if(b.resultat==1): - print("OK: [%s] %s: %s" % (b.nom,b.nom_split,b.noeuds)) - fich.write("OK: [%s] %s: %s\n" % (b.nom,b.nom_split,b.noeuds)) - else: - if(b.type==1): - print("FAIL: [%s] %s: %s DEPENDANCE FAIL" % (b.nom,b.nom_split,b.noeuds)) - print("Output: %s" % b.output) - fich.write("FAIL: [%s] %s: %s DEPENDANCE FAIL\n" % (b.nom,b.nom_split,b.noeuds)) - fich.write("Output: %s\n" % b.output) - elif(b.type==2): - print("FAIL: [%s] %s: %s SERVICE FAIL" % (b.nom,b.nom_split,b.noeuds)) - print("Output: %s" % b.output) - fich.write("FAIL: [%s] %s: %s SERVICE FAIL\n" % (b.nom,b.nom_split,b.noeuds)) - fich.write("Output: %s\n" % b.output) - print("") - fich.write("\n") - - - def item_selected(): - configuration_IHM.pushButton_2.setEnabled(True) - - def on_text_edited(): - etatnoeud_IHM.pushButton.setEnabled(True) - - #signaux - clustershell_IHM.pushButton.clicked.connect(config) - clustershell_IHM.pushButton_2.clicked.connect(lancer) - clustershell_IHM.pushButton_3.clicked.connect(resultat) - clustershell_IHM.pushButton_4.clicked.connect(on_click_ouvre_etat) - - configuration_IHM.pushButton.clicked.connect(on_click_add_service) - configuration_IHM.pushButton_2.clicked.connect(on_click_delete_service) - configuration_IHM.pushButton_3.clicked.connect(close) - configuration_IHM.pushButton_4.clicked.connect(importer) - configuration_IHM.listWidget.itemClicked.connect(item_selected) - - etatnoeud_IHM.pushButton_2.clicked.connect(close_window_etat) - etatnoeud_IHM.pushButton_3.clicked.connect(open_file_browsers) - etatnoeud_IHM.pushButton.clicked.connect(check_etat_noeud) - etatnoeud_IHM.listWidget_2.currentItemChanged.connect(on_item_clicked) - - etatnoeud_IHM.lineEdit.textEdited.connect(on_text_edited) - etatnoeud_IHM.lineEdit.textChanged.connect(on_text_edited) - - - clustershell_IHM.main() - app.exec_() - - +#!/usr/bin/env python2.7 +# -*- coding: utf-8 -*- + + +from PyQt4 import QtGui, QtCore +from PyQt4.QtCore import pyqtSlot +from PyQt4.QtGui import * + +from ClusterShell.Task import task_self, NodeSet +from cluster import clustershell,fichier,typeservice,recap_cluster,fichier2,check_service2,check_attribut2 + +try: + _fromUtf8 = QtCore.QString.fromUtf8 +except AttributeError: + _fromUtf8 = lambda s: s + +import sys,datetime,os,yaml + + +import clustershell_IHM,configuration_IHM,etatnoeud_IHM,check_noeud +from ClusterShell.Task import task_self, NodeSet + + +class clustershell_IHM(QtGui.QMainWindow, clustershell_IHM.Ui_MainWindow): + list_service=[] + list_recap=[] + def __init__(self, parent=None): + super(clustershell_IHM, self).__init__(parent) + self.setupUi(self) + #self.label.setText("test") + self.progressBar.hide() + def main(self): + self.show() + +class configuration_IHM(QtGui.QWidget, configuration_IHM.Ui_Form): + def __init__(self, parent=None): + super(configuration_IHM, self).__init__(parent) + self.setupUi(self) + self.comboBox.addItem("start") + self.comboBox.addItem("stop") + self.comboBox.addItem("restart") + self.comboBox.addItem("reload") + def main(self): + self.show() + +class etatnoeud_IHM(QtGui.QWidget, etatnoeud_IHM.Ui_Form): + sortie = [] + def __init__(self, parent=None): + super(etatnoeud_IHM, self).__init__(parent) + self.setupUi(self) + def main(self): + self.show() + + + + + + +if __name__=='__main__': + app=QtGui.QApplication(sys.argv) + clustershell_IHM = clustershell_IHM() + configuration_IHM = configuration_IHM() + etatnoeud_IHM = etatnoeud_IHM() + + + #actions boutons + @pyqtSlot() + def config(): + configuration_IHM.lineEdit.clear() + configuration_IHM.lineEdit_2.clear() + configuration_IHM.lineEdit_3.clear() + configuration_IHM.pushButton_2.setEnabled(False) + configuration_IHM.main() + + def on_click_add_service(): + ok=0 + if(configuration_IHM.lineEdit.text()!=""): + name=configuration_IHM.lineEdit.text() + dependance=configuration_IHM.lineEdit_3.text() + action=configuration_IHM.comboBox.currentText() + if(configuration_IHM.lineEdit_2.text()!=""): + try: + noeuds=configuration_IHM.lineEdit_2.text() + nodeset=NodeSet(str(noeuds)) + ok=1 + except: + noeuds="" + QMessageBox.about(configuration_IHM,"Erreur","Syntaxe noeuds incorrect") + if( ok==1 and name!="" and noeuds!="" and dependance!=""): + configuration_IHM.listWidget.addItem("%d: %s %s ON %s (depend %s)"%(configuration_IHM.listWidget.count()+1,name,action,noeuds,dependance)) + clustershell_IHM.list_service.append(typeservice(name,action,noeuds,dependance)) + print("c'est cool") + if(ok==1 and name!="" and noeuds!="" and dependance==""): + configuration_IHM.listWidget.addItem("%d: %s %s ON %s"%(configuration_IHM.listWidget.count()+1,name,action,noeuds)) + clustershell_IHM.list_service.append(typeservice(name,action,noeuds)) + else: + QMessageBox.about(configuration_IHM,"Erreur","Attribut noeuds manquant") + else: + QMessageBox.about(configuration_IHM,"Erreur","Attribut service manquant") + + + def on_click_delete_service(): + service_number=configuration_IHM.listWidget.currentRow() + configuration_IHM.listWidget.takeItem(service_number) + del clustershell_IHM.list_service[configuration_IHM.listWidget.currentRow()] + configuration_IHM.pushButton_2.setEnabled(False) + + + def on_click_ouvre_etat(): + etatnoeud_IHM.main() + + def check_etat_noeud(): + etatnoeud_IHM.lineEdit.clear() + etatnoeud_IHM.listWidget.clear() + etatnoeud_IHM.listWidget_2.clear() + etatnoeud_IHM.listWidget_3.clear() + + i = 1 + msg = QMessageBox() + msg.setIcon(QMessageBox.Warning) + msg.setWindowTitle("Erreur") + noeuds = etatnoeud_IHM.lineEdit.text() + if (noeuds!=""): + try: + nodeset = NodeSet(str(noeuds)) + print nodeset + for node in nodeset: + cli = "echo Hello" + taske = task_self() + taske.shell(cli, nodes=node) + taske.run() + + for output, nodelist in task_self().iter_buffers(): + if(output=="Hello"): + + etatnoeud_IHM.listWidget.insertItem(i,"%s" % (NodeSet.fromlist(nodelist))) + i = i + 1 + + else: + etatnoeud_IHM.listWidget_2.insertItem(i,"%s" % (NodeSet.fromlist(nodelist))) + i = i + 1 + etatnoeud_IHM.sortie.append(output) + print "output: %s" % output + + except: + msg.setText("Oups ! Probleme") + msg.exec_() + + else: + msg.setText("Veuillez rentrer un ou plusieur noeuds") + msg.setDetailedText("node1,node2\nnode[1-5]\nnode1,node[5-6]\netc...") + msg.exec_() + + def close_window_etat(): + etatnoeud_IHM.close() + + def open_file_browsers(): + fichier2(etatnoeud_IHM) + + + def on_item_clicked(): + #etatnoeud_IHM.setEnabled(True) + index = etatnoeud_IHM.listWidget_2.currentRow() + print "index: %s" % index + etatnoeud_IHM.listWidget_3.clear() + etatnoeud_IHM.listWidget_3.insertItem(1,str(etatnoeud_IHM.sortie[index])) + + def close(): + clustershell_IHM.label.setText("%d action(s)" % configuration_IHM.listWidget.count()) + if(configuration_IHM.listWidget.count()==0): + clustershell_IHM.pushButton_2.setEnabled(False) + else: + clustershell_IHM.pushButton_2.setEnabled(True) + configuration_IHM.close() + + def importer(): + fichier(clustershell_IHM,configuration_IHM) + + def lancer(): + del(clustershell_IHM.list_recap[:]) + clustershell_IHM.listWidget.clear() + clustershell_IHM.progressBar.reset() + clustershell_IHM.progressBar.update() + clustershell_IHM.progressBar.show() + for i in range(0,len(clustershell_IHM.list_service)): + nom=clustershell_IHM.list_service[i].nom + action=clustershell_IHM.list_service[i].action + noeuds=clustershell_IHM.list_service[i].noeuds + dependance=clustershell_IHM.list_service[i].dependance + if(clustershell_IHM.list_service[i].dependance==""): + #clustershell_IHM.listWidget.insertItem(clustershell_IHM.listWidget.count()+1,"%s %s ON %s" % (nom,action,noeuds)) + clustershell_IHM.listWidget.addItem("%s %s ON %s *********************************" % (nom,action,noeuds)) + print("%s %s ON %s *********************************" % (nom,action,noeuds)) + else: + clustershell_IHM.listWidget.addItem("%s %s ON %s (depend: %s) ********************" % (nom,action,noeuds,dependance)) + print("%s %s ON %s (depend: %s) ********************" % (nom,action,noeuds,dependance)) + + + clustershell(clustershell_IHM,clustershell_IHM.list_service,i) + clustershell_IHM.progressBar.setValue((100/(len(clustershell_IHM.list_service))*(i+1))) + clustershell_IHM.progressBar.update() + clustershell_IHM.progressBar.setValue(100) + clustershell_IHM.progressBar.update() + + def resultat(): + print("") + if(len(clustershell_IHM.list_recap)>0): + for b in clustershell_IHM.list_recap: + if(b.resultat==1): + print("OK: [%s] %s: %s" % (b.nom,b.nom_split,b.noeuds)) + else: + if(b.type==1): + print("FAIL: [%s] %s: %s DEPENDANCE FAIL" % (b.nom,b.nom_split,b.noeuds)) + print("Output: %s" % b.output) + elif(b.type==2): + print("FAIL: [%s] %s: %s SERVICE FAIL" % (b.nom,b.nom_split,b.noeuds)) + print("Output: %s" % b.output) + print("") + date=datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S') + print type(date) + if(len(clustershell_IHM.list_recap)>0): + with open("log_%s" % date,'w') as fich: + for b in clustershell_IHM.list_recap: + if(b.resultat==1): + print("OK: [%s] %s: %s" % (b.nom,b.nom_split,b.noeuds)) + fich.write("OK: [%s] %s: %s\n" % (b.nom,b.nom_split,b.noeuds)) + else: + if(b.type==1): + print("FAIL: [%s] %s: %s DEPENDANCE FAIL" % (b.nom,b.nom_split,b.noeuds)) + print("Output: %s" % b.output) + fich.write("FAIL: [%s] %s: %s DEPENDANCE FAIL\n" % (b.nom,b.nom_split,b.noeuds)) + fich.write("Output: %s\n" % b.output) + elif(b.type==2): + print("FAIL: [%s] %s: %s SERVICE FAIL" % (b.nom,b.nom_split,b.noeuds)) + print("Output: %s" % b.output) + fich.write("FAIL: [%s] %s: %s SERVICE FAIL\n" % (b.nom,b.nom_split,b.noeuds)) + fich.write("Output: %s\n" % b.output) + print("") + fich.write("\n") + + + def item_selected(): + configuration_IHM.pushButton_2.setEnabled(True) + + def on_text_edited(): + etatnoeud_IHM.pushButton.setEnabled(True) + + #signaux + clustershell_IHM.pushButton.clicked.connect(config) + clustershell_IHM.pushButton_2.clicked.connect(lancer) + clustershell_IHM.pushButton_3.clicked.connect(resultat) + clustershell_IHM.pushButton_4.clicked.connect(on_click_ouvre_etat) + + configuration_IHM.pushButton.clicked.connect(on_click_add_service) + configuration_IHM.pushButton_2.clicked.connect(on_click_delete_service) + configuration_IHM.pushButton_3.clicked.connect(close) + configuration_IHM.pushButton_4.clicked.connect(importer) + configuration_IHM.listWidget.itemClicked.connect(item_selected) + + etatnoeud_IHM.pushButton_2.clicked.connect(close_window_etat) + etatnoeud_IHM.pushButton_3.clicked.connect(open_file_browsers) + etatnoeud_IHM.pushButton.clicked.connect(check_etat_noeud) + etatnoeud_IHM.listWidget_2.currentItemChanged.connect(on_item_clicked) + + etatnoeud_IHM.lineEdit.textEdited.connect(on_text_edited) + etatnoeud_IHM.lineEdit.textChanged.connect(on_text_edited) + + + clustershell_IHM.main() + app.exec_() + + diff --git a/clustershell_IHM/IHM.pyc b/clustershell_IHM/IHM.pyc old mode 100644 new mode 100755 diff --git a/clustershell_IHM/check_noeud.py b/clustershell_IHM/check_noeud.py old mode 100644 new mode 100755 index 30a6a70..0988ae6 --- a/clustershell_IHM/check_noeud.py +++ b/clustershell_IHM/check_noeud.py @@ -1,9 +1,9 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - - -from ClusterShell import NodeSet - - - - +#!/usr/bin/env python +# -*- coding: utf-8 -*- + + +from ClusterShell import NodeSet + + + + diff --git a/clustershell_IHM/check_noeud.pyc b/clustershell_IHM/check_noeud.pyc index 9e8c859bdfcff010671f651dc907e148b36fa939..8668796b489725fd8cc8d71ff5a34f3bafbee628 100644 GIT binary patch delta 43 ycmcb@c%6}*`7_rkT3=9nV8Tq-X`bC+^+4?T|$)&lec_qaY``iF2@(y_wuE3=9nV8Tq-X`Xw2u`T7Ax`B|wY6DPU>0P?yF%K!iX diff --git a/clustershell_IHM/cluster.py b/clustershell_IHM/cluster.py old mode 100644 new mode 100755 index 5726ae3..9e27354 --- a/clustershell_IHM/cluster.py +++ b/clustershell_IHM/cluster.py @@ -1,266 +1,266 @@ -#!/usr/bin/env python2.7 -# -*- coding: utf-8 -*- - - -from PyQt4 import QtGui, QtCore -from PyQt4.QtCore import pyqtSlot -from PyQt4.QtGui import * -from ClusterShell.Task import task_self, NodeSet - - -import sys,os,yaml - -try: - _fromUtf8 = QtCore.QString.fromUtf8 -except AttributeError: - _fromUtf8 = lambda s: s - -class typeservice: - def __init__(self,nom,action,noeuds,dependance=""): - self.nom=nom - self.action=action - self.noeuds=noeuds - self.dependance=dependance - -class recap_cluster: - def __init__(self,nom,nom_split,noeuds,resultat,type=0,output=""): - self.nom=nom - self.nom_split=nom_split - self.noeuds=noeuds - self.resultat=resultat - self.type=type - self.output=output - -def check_depend(clustershell_IHM,service,name,j): - if(service[j].dependance!=""): - serv=str(service[j].dependance) - serv_split=serv.split(",") - taske = task_self() - nodes=str(service[j].noeuds) - result=[] - error_nodes=[] - for m in range(0,len(serv_split)): - out="" - output="" - cli="service %s start" % serv_split[m] - taske.shell(cli, nodes=nodes) - taske.run() - for output, nodelist in taske.iter_buffers(): - result.append(serv_split[m]) - print("/!\ Avortement /!\ %s: le service %s n'est pas activé ou installé" % (NodeSet.fromlist(nodelist),serv_split[m])) - clustershell_IHM.listWidget.addItem("Avortement %s: le service %s n'est pas activé ou installé" % (NodeSet.fromlist(nodelist),serv_split[m])) - dep="Avortement %s: le service %s n'est pas activé ou installé" % (NodeSet.fromlist(nodelist),serv_split[m]) - clustershell_IHM.list_recap.append(recap_cluster(serv,serv_split[m],NodeSet.fromlist(nodelist),0,1,dep)) - - else: - return(True,0) - if(len(result)==0): - return(True,0) - else: - return(False,result) - - -def clustershell(clustershell_IHM,service,i): - task = task_self() - name=str(service[i].nom) - name_split=name.split(",") - state=str(service[i].action) - nodes=str(service[i].noeuds) - test_depend,result=check_depend(clustershell_IHM,service,name,i) - if(test_depend==True): - for n in range(0,len(name_split)): - out="" - output="" - cli="service %s %s" % (name_split[n],state) - task.shell(cli, nodes=nodes) - task.run() - nodeset= NodeSet(nodes) - for output, nodelist in task.iter_buffers(): - print("FAIL %s: %s %s" %(name_split[n],NodeSet.fromlist(nodelist), output)) - clustershell_IHM.listWidget.addItem("FAIL %s: %s %s" %(name_split[n],NodeSet.fromlist(nodelist), output)) - nodeset.remove(NodeSet.fromlist(nodelist)) - clustershell_IHM.list_recap.append(recap_cluster(name,name_split[n],NodeSet.fromlist(nodelist),0,2,output)) - if(str(nodeset)!=nodes): - if(len(nodeset)>0): - print("OK %s: %s" % (name_split[n],nodeset)) - clustershell_IHM.listWidget.addItem("OK %s: %s" % (name_split[n],nodeset)) - clustershell_IHM.list_recap.append(recap_cluster(name,name_split[n],nodeset,1)) - if(str(nodeset)==nodes): - print("OK %s: %s" % (name_split[n],nodes)) - clustershell_IHM.listWidget.addItem("OK %s: %s" % (name_split[n],nodes)) - clustershell_IHM.list_recap.append(recap_cluster(name,name_split[n],nodes,1)) - #if(out==output): - # print("OK") - # clustershell_IHM.listWidget.addItem("OK") - -def check_service(doc): - if(isinstance(doc,list)==True and len(doc)>=1): # vérification de la structure du fichier YAML - return(True) - else: - return(False) - -def add_key(doc): # remet les services dans le bon ordre - service=[] - compt=0 - for i in range(0,len(doc)): - print(" %s: %s" % (compt,doc[i].keys()[0])) - compt +=1 - service.append(doc[i].keys()[0]) - print("") - return(service) - -def check_attribut(doc,service,clustershell_IHM,configuration_IHM): - for i in range(0,len(service)): - ok=0 - name=service[i] - if(doc[i].get(name).has_key("state")==False): - print("/!\\ attribut \"state\" manquant pour %d: %s /!\\" % (i,name)) - QMessageBox.about(configuration_IHM,"Erreur","/!\\ attribut \"state\" manquant pour %d: %s /!\\" % (i+1,name)) - return(False) - if not(doc[i].get(name).get("state") in ['start','stop','status','reload']): - print("/!\\ attribut \"state\" doit être [start/stop/status/reload] pour %d: %s /!\\" % (i,name)) - QMessageBox.about(configuration_IHM,"Erreur","/!\\ attribut \"state\" doit être [start/stop/status/reload] pour %d: %s /!\\" % (i+1,name)) - return(False) - if(doc[i].get(name).has_key("nodes")==False or doc[i].get(name).get("nodes")==None): - print("/!\\ attribut \"nodes\" manquant pour %d: %s /!\\" % (i,name)) - QMessageBox.about(configuration_IHM,"Erreur","/!\\ attribut \"nodes\" manquant pour %d: %s /!\\" % (i+1,name)) - return(False) - try: # vérifie les erreurs de syntaxe pour les node - nodeset=NodeSet(doc[i].get(name).get("nodes")) - ok=1 - except: - QMessageBox.about(configuration_IHM,"Erreur","/!\\ Problème avec la syntaxe de \"%s\" pour %d: %s /!\\" % (doc[i].get(name).get("nodes"),i,name)) - print("/!\\ Problème avec la syntaxe de \"%s\" pour %d: %s /!\\" % (doc[i].get(name).get("nodes"),i+1,name)) - print("\n") - return(False) - - if(ok==1): - for i in range(0,len(service)): - name=service[i] - action=doc[i].get(name).get("state") - noeuds=doc[i].get(name).get("nodes") - if(doc[i].get(name).get("depend")!=None): - dependance=doc[i].get(name).get("depend") - print dependance - configuration_IHM.listWidget.addItem("%d: %s %s ON %s (depend %s)"%(configuration_IHM.listWidget.count()+1,name,action,str(nodeset),dependance)) - clustershell_IHM.list_service.append(typeservice(name,action,noeuds,dependance)) - else: - configuration_IHM.listWidget.addItem("%d: %s %s ON %s"%(configuration_IHM.listWidget.count()+1,name,action,str(nodeset))) - clustershell_IHM.list_service.append(typeservice(name,action,noeuds)) - - return(True) - - - -def fichier(clustershell_IHM,configuration_IHM): - dlg = QFileDialog() - dlg.setFileMode(QFileDialog.AnyFile) - - filename = dlg.getOpenFileName(configuration_IHM, 'Explorateur','/home/', 'File (*.*)') - with open(filename,'r') as stream: - try: - doc=yaml.safe_load(stream) - if(check_service(doc)): - service=add_key(doc) - if(check_attribut(doc,service,clustershell_IHM,configuration_IHM)): - return(True) - - except yaml.YAMLError as exc: - QMessageBox.about(configuration_IHM,"Erreur Fichier YAML","%s" % exc) - print(exc) - return(False) - -def fichier2(etatnoeud_IHM): - dlg = QFileDialog() - dlg.setFileMode(QFileDialog.AnyFile) - - filename = dlg.getOpenFileName(etatnoeud_IHM, 'Explorateur','/home/', 'File (*.*)') - with open(filename,'r') as stream: - try: - doc=yaml.safe_load(stream) - if(check_service2(doc,etatnoeud_IHM,filename)): - service=add_key(doc) - if(check_attribut2(doc,service,etatnoeud_IHM)): - return(True) - - except yaml.YAMLError as exc: - QMessageBox.about(etatnoeud_IHM,"Erreur Fichier YAML","%s" % exc) - print(exc) - return(False) - - -def check_service2(doc,etatnoeud_IHM,filename): - if(isinstance(doc,list)==True and len(doc)>=1): # vérification de la structure du fichier YAML - return(True) - else: - QMessageBox.about(etatnoeud_IHM,"Erreur Syntaxe dans","%s" % filename) - return(False) - -def check_attribut2(doc,service,etatnoeud_IHM): - a = 0 - new_nodeset = NodeSet() - for i in range(0,len(service)): - ok=0 - name=service[i] - - if(doc[i].get(name).has_key("state")==False): - print("/!\\ attribut \"state\" manquant pour %d: %s /!\\" % (i,name)) - QMessageBox.about(etatnoeud_IHM,"Erreur","/!\\ attribut \"state\" manquant pour %d: %s /!\\" % (i+1,name)) - return(False) - if not(doc[i].get(name).get("state") in ['start','stop','status','reload']): - print("/!\\ attribut \"state\" doit être [start/stop/status/reload] pour %d: %s /!\\" % (i,name)) - QMessageBox.about(etatnoeud_IHM,"Erreur","/!\\ attribut \"state\" doit être [start/stop/status/reload] pour %d: %s /!\\" % (i+1,name)) - return(False) - if(doc[i].get(name).has_key("nodes")==False or doc[i].get(name).get("nodes")==None): - print("/!\\ attribut \"nodes\" manquant pour %d: %s /!\\" % (i,name)) - QMessageBox.about(etatnoeud_IHM,"Erreur","/!\\ attribut \"nodes\" manquant pour %d: %s /!\\" % (i+1,name)) - return(False) - try: # vérifie les erreurs de syntaxe pour les node - nodeset=NodeSet(doc[i].get(name).get("nodes")) - new_nodeset.update(nodeset) - ok=1 - except: - QMessageBox.about(etatnoeud_IHM,"Erreur","/!\\ Problème avec la syntaxe de \"%s\" pour %d: %s /!\\" % (doc[i].get(name).get("nodes"),i,name)) - print("/!\\ Problème avec la syntaxe de \"%s\" pour %d: %s /!\\" % (doc[i].get(name).get("nodes"),i+1,name)) - print("\n") - return(False) - - if(ok==1): - check_etat_noeud2(etatnoeud_IHM,new_nodeset) - - return(True) - -def check_etat_noeud2(etatnoeud_IHM,nodeset): - - etatnoeud_IHM.listWidget.clear() - etatnoeud_IHM.listWidget_2.clear() - etatnoeud_IHM.listWidget_3.clear() - - i = 1 - - print nodeset - for node in nodeset: - cli = "echo Hello" - taske = task_self() - taske.shell(cli, nodes=node) - taske.run() - - for output, nodelist in task_self().iter_buffers(): - if(output=="Hello"): - - etatnoeud_IHM.listWidget.insertItem(i,"%s" % (NodeSet.fromlist(nodelist))) - i = i + 1 - - else: - etatnoeud_IHM.listWidget_2.insertItem(i,"%s" % (NodeSet.fromlist(nodelist))) - i = i + 1 - etatnoeud_IHM.sortie.append(output) - print "output: %s" % output - - - - - - - - +#!/usr/bin/env python2.7 +# -*- coding: utf-8 -*- + + +from PyQt4 import QtGui, QtCore +from PyQt4.QtCore import pyqtSlot +from PyQt4.QtGui import * +from ClusterShell.Task import task_self, NodeSet + + +import sys,os,yaml + +try: + _fromUtf8 = QtCore.QString.fromUtf8 +except AttributeError: + _fromUtf8 = lambda s: s + +class typeservice: + def __init__(self,nom,action,noeuds,dependance=""): + self.nom=nom + self.action=action + self.noeuds=noeuds + self.dependance=dependance + +class recap_cluster: + def __init__(self,nom,nom_split,noeuds,resultat,type=0,output=""): + self.nom=nom + self.nom_split=nom_split + self.noeuds=noeuds + self.resultat=resultat + self.type=type + self.output=output + +def check_depend(clustershell_IHM,service,name,j): + if(service[j].dependance!=""): + serv=str(service[j].dependance) + serv_split=serv.split(",") + taske = task_self() + nodes=str(service[j].noeuds) + result=[] + error_nodes=[] + for m in range(0,len(serv_split)): + out="" + output="" + cli="service %s start" % serv_split[m] + taske.shell(cli, nodes=nodes) + taske.run() + for output, nodelist in taske.iter_buffers(): + result.append(serv_split[m]) + print("/!\ Avortement /!\ %s: le service %s n'est pas activé ou installé" % (NodeSet.fromlist(nodelist),serv_split[m])) + clustershell_IHM.listWidget.addItem("Avortement %s: le service %s n'est pas activé ou installé" % (NodeSet.fromlist(nodelist),serv_split[m])) + dep="Avortement %s: le service %s n'est pas activé ou installé" % (NodeSet.fromlist(nodelist),serv_split[m]) + clustershell_IHM.list_recap.append(recap_cluster(serv,serv_split[m],NodeSet.fromlist(nodelist),0,1,dep)) + + else: + return(True,0) + if(len(result)==0): + return(True,0) + else: + return(False,result) + + +def clustershell(clustershell_IHM,service,i): + task = task_self() + name=str(service[i].nom) + name_split=name.split(",") + state=str(service[i].action) + nodes=str(service[i].noeuds) + test_depend,result=check_depend(clustershell_IHM,service,name,i) + if(test_depend==True): + for n in range(0,len(name_split)): + out="" + output="" + cli="service %s %s" % (name_split[n],state) + task.shell(cli, nodes=nodes) + task.run() + nodeset= NodeSet(nodes) + for output, nodelist in task.iter_buffers(): + print("FAIL %s: %s %s" %(name_split[n],NodeSet.fromlist(nodelist), output)) + clustershell_IHM.listWidget.addItem("FAIL %s: %s %s" %(name_split[n],NodeSet.fromlist(nodelist), output)) + nodeset.remove(NodeSet.fromlist(nodelist)) + clustershell_IHM.list_recap.append(recap_cluster(name,name_split[n],NodeSet.fromlist(nodelist),0,2,output)) + if(str(nodeset)!=nodes): + if(len(nodeset)>0): + print("OK %s: %s" % (name_split[n],nodeset)) + clustershell_IHM.listWidget.addItem("OK %s: %s" % (name_split[n],nodeset)) + clustershell_IHM.list_recap.append(recap_cluster(name,name_split[n],nodeset,1)) + if(str(nodeset)==nodes): + print("OK %s: %s" % (name_split[n],nodes)) + clustershell_IHM.listWidget.addItem("OK %s: %s" % (name_split[n],nodes)) + clustershell_IHM.list_recap.append(recap_cluster(name,name_split[n],nodes,1)) + #if(out==output): + # print("OK") + # clustershell_IHM.listWidget.addItem("OK") + +def check_service(doc): + if(isinstance(doc,list)==True and len(doc)>=1): # vérification de la structure du fichier YAML + return(True) + else: + return(False) + +def add_key(doc): # remet les services dans le bon ordre + service=[] + compt=0 + for i in range(0,len(doc)): + print(" %s: %s" % (compt,doc[i].keys()[0])) + compt +=1 + service.append(doc[i].keys()[0]) + print("") + return(service) + +def check_attribut(doc,service,clustershell_IHM,configuration_IHM): + for i in range(0,len(service)): + ok=0 + name=service[i] + if(doc[i].get(name).has_key("state")==False): + print("/!\\ attribut \"state\" manquant pour %d: %s /!\\" % (i,name)) + QMessageBox.about(configuration_IHM,"Erreur","/!\\ attribut \"state\" manquant pour %d: %s /!\\" % (i+1,name)) + return(False) + if not(doc[i].get(name).get("state") in ['start','stop','status','reload']): + print("/!\\ attribut \"state\" doit être [start/stop/status/reload] pour %d: %s /!\\" % (i,name)) + QMessageBox.about(configuration_IHM,"Erreur","/!\\ attribut \"state\" doit être [start/stop/status/reload] pour %d: %s /!\\" % (i+1,name)) + return(False) + if(doc[i].get(name).has_key("nodes")==False or doc[i].get(name).get("nodes")==None): + print("/!\\ attribut \"nodes\" manquant pour %d: %s /!\\" % (i,name)) + QMessageBox.about(configuration_IHM,"Erreur","/!\\ attribut \"nodes\" manquant pour %d: %s /!\\" % (i+1,name)) + return(False) + try: # vérifie les erreurs de syntaxe pour les node + nodeset=NodeSet(doc[i].get(name).get("nodes")) + ok=1 + except: + QMessageBox.about(configuration_IHM,"Erreur","/!\\ Problème avec la syntaxe de \"%s\" pour %d: %s /!\\" % (doc[i].get(name).get("nodes"),i,name)) + print("/!\\ Problème avec la syntaxe de \"%s\" pour %d: %s /!\\" % (doc[i].get(name).get("nodes"),i+1,name)) + print("\n") + return(False) + + if(ok==1): + for i in range(0,len(service)): + name=service[i] + action=doc[i].get(name).get("state") + noeuds=doc[i].get(name).get("nodes") + if(doc[i].get(name).get("depend")!=None): + dependance=doc[i].get(name).get("depend") + print dependance + configuration_IHM.listWidget.addItem("%d: %s %s ON %s (depend %s)"%(configuration_IHM.listWidget.count()+1,name,action,str(nodeset),dependance)) + clustershell_IHM.list_service.append(typeservice(name,action,noeuds,dependance)) + else: + configuration_IHM.listWidget.addItem("%d: %s %s ON %s"%(configuration_IHM.listWidget.count()+1,name,action,str(nodeset))) + clustershell_IHM.list_service.append(typeservice(name,action,noeuds)) + + return(True) + + + +def fichier(clustershell_IHM,configuration_IHM): + dlg = QFileDialog() + dlg.setFileMode(QFileDialog.AnyFile) + + filename = dlg.getOpenFileName(configuration_IHM, 'Explorateur','/home/', 'File (*.*)') + with open(filename,'r') as stream: + try: + doc=yaml.safe_load(stream) + if(check_service(doc)): + service=add_key(doc) + if(check_attribut(doc,service,clustershell_IHM,configuration_IHM)): + return(True) + + except yaml.YAMLError as exc: + QMessageBox.about(configuration_IHM,"Erreur Fichier YAML","%s" % exc) + print(exc) + return(False) + +def fichier2(etatnoeud_IHM): + dlg = QFileDialog() + dlg.setFileMode(QFileDialog.AnyFile) + + filename = dlg.getOpenFileName(etatnoeud_IHM, 'Explorateur','/home/', 'File (*.*)') + with open(filename,'r') as stream: + try: + doc=yaml.safe_load(stream) + if(check_service2(doc,etatnoeud_IHM,filename)): + service=add_key(doc) + if(check_attribut2(doc,service,etatnoeud_IHM)): + return(True) + + except yaml.YAMLError as exc: + QMessageBox.about(etatnoeud_IHM,"Erreur Fichier YAML","%s" % exc) + print(exc) + return(False) + + +def check_service2(doc,etatnoeud_IHM,filename): + if(isinstance(doc,list)==True and len(doc)>=1): # vérification de la structure du fichier YAML + return(True) + else: + QMessageBox.about(etatnoeud_IHM,"Erreur Syntaxe dans","%s" % filename) + return(False) + +def check_attribut2(doc,service,etatnoeud_IHM): + a = 0 + new_nodeset = NodeSet() + for i in range(0,len(service)): + ok=0 + name=service[i] + + if(doc[i].get(name).has_key("state")==False): + print("/!\\ attribut \"state\" manquant pour %d: %s /!\\" % (i,name)) + QMessageBox.about(etatnoeud_IHM,"Erreur","/!\\ attribut \"state\" manquant pour %d: %s /!\\" % (i+1,name)) + return(False) + if not(doc[i].get(name).get("state") in ['start','stop','status','reload']): + print("/!\\ attribut \"state\" doit être [start/stop/status/reload] pour %d: %s /!\\" % (i,name)) + QMessageBox.about(etatnoeud_IHM,"Erreur","/!\\ attribut \"state\" doit être [start/stop/status/reload] pour %d: %s /!\\" % (i+1,name)) + return(False) + if(doc[i].get(name).has_key("nodes")==False or doc[i].get(name).get("nodes")==None): + print("/!\\ attribut \"nodes\" manquant pour %d: %s /!\\" % (i,name)) + QMessageBox.about(etatnoeud_IHM,"Erreur","/!\\ attribut \"nodes\" manquant pour %d: %s /!\\" % (i+1,name)) + return(False) + try: # vérifie les erreurs de syntaxe pour les node + nodeset=NodeSet(doc[i].get(name).get("nodes")) + new_nodeset.update(nodeset) + ok=1 + except: + QMessageBox.about(etatnoeud_IHM,"Erreur","/!\\ Problème avec la syntaxe de \"%s\" pour %d: %s /!\\" % (doc[i].get(name).get("nodes"),i,name)) + print("/!\\ Problème avec la syntaxe de \"%s\" pour %d: %s /!\\" % (doc[i].get(name).get("nodes"),i+1,name)) + print("\n") + return(False) + + if(ok==1): + check_etat_noeud2(etatnoeud_IHM,new_nodeset) + + return(True) + +def check_etat_noeud2(etatnoeud_IHM,nodeset): + + etatnoeud_IHM.listWidget.clear() + etatnoeud_IHM.listWidget_2.clear() + etatnoeud_IHM.listWidget_3.clear() + + i = 1 + + print nodeset + for node in nodeset: + cli = "echo Hello" + taske = task_self() + taske.shell(cli, nodes=node) + taske.run() + + for output, nodelist in task_self().iter_buffers(): + if(output=="Hello"): + + etatnoeud_IHM.listWidget.insertItem(i,"%s" % (NodeSet.fromlist(nodelist))) + i = i + 1 + + else: + etatnoeud_IHM.listWidget_2.insertItem(i,"%s" % (NodeSet.fromlist(nodelist))) + i = i + 1 + etatnoeud_IHM.sortie.append(output) + print "output: %s" % output + + + + + + + + diff --git a/clustershell_IHM/cluster.pyc b/clustershell_IHM/cluster.pyc index b54fd8755ddf59761cade292703cadc86205091d..17aba6972ed14e7f2ba11b230ddbafe39935e818 100644 GIT binary patch delta 557 zcmeD1-Qmm5{F#@l?V$8V_H&F94h#$o`WgATsrp5k$=UiY`N^fZsd**ElMTgnCyO)v z!LJ~cIT)V;oy{+qRq@)PGufZj4!;rSSpPHQQ=z+=pG$`YuZqe1T&$Cu_@3ZZw0Q-; z7+$yPZW5GX!)e53L-FNIIAuY>IZ2RZvz!zwenp#8Wti}~LTB>|S%19V)!A&J6phyw Roy}KNO!3;HJK0;!76750trq|Q delta 507 zcmdnt+u_U3{F#?)?`?^V?B^IoZ5bFC^fU5vQ}s(SQuFl#it@8kOD1n*)tM~G^cRn8 z6mtkpS>4T_nN@Hbtvfk})fT(v%^O*@S+Gli+_YJNOBavyWCbp^$1>t~lx4%CyIQ=O36Hdu6c;|}4jE?LcI$4wAnS+QZ@Qb4m7;JPuDh8@)daWUI+Lr^ F>;RX;p9uf} diff --git a/clustershell_IHM/clustershell_IHM.pro b/clustershell_IHM/clustershell_IHM.pro old mode 100644 new mode 100755 diff --git a/clustershell_IHM/clustershell_IHM.pro.user b/clustershell_IHM/clustershell_IHM.pro.user old mode 100644 new mode 100755 diff --git a/clustershell_IHM/clustershell_IHM.pro.user.79e2c7c b/clustershell_IHM/clustershell_IHM.pro.user.79e2c7c old mode 100644 new mode 100755 diff --git a/clustershell_IHM/clustershell_IHM.py b/clustershell_IHM/clustershell_IHM.py old mode 100644 new mode 100755 diff --git a/clustershell_IHM/clustershell_IHM.pyc b/clustershell_IHM/clustershell_IHM.pyc index 747c81f1cd0b00e4f10ddcdb9b91b1592cc10ad3..3b1e0428bf3ea9e7c1980351cc5e587e336233fc 100644 GIT binary patch delta 241 zcmeBIT%yR%{F#^Q?{?{p?3|1eo(v2O`WgATsrp5k$=UiY`N^fZsd**ElNET(CPy=F u!>=HQsSck4)6FW(&pB|a*sQ=)!h};6=mOKp_xQr`E2!t6gIj@tKs*4PG)#5? delta 216 zcmZ3Y*ssXW{F#?aaKHFQc1}i7HwFd<{fzwFRQ-~S)O`JbqWrAXlF2$uW|QL>x8aoC rfT-)yrU^D_?Y(wlX7N|>-qO$O?m{EjaSr|d->G9Z^$3upoWj_E?j diff --git a/clustershell_IHM/clustershell_IHM.ui b/clustershell_IHM/clustershell_IHM.ui old mode 100644 new mode 100755 diff --git a/clustershell_IHM/configuration_IHM.py b/clustershell_IHM/configuration_IHM.py old mode 100644 new mode 100755 diff --git a/clustershell_IHM/configuration_IHM.pyc b/clustershell_IHM/configuration_IHM.pyc index 9c1f87a22016bd79b0d347fcfa6a90f286301c92..5496991e3af8855d328df11411e31687327ff683 100644 GIT binary patch delta 245 zcmX>j`%sph`7z*Q}arSCx2uzn;gx! v9lwHDrh1$THh*MdX2&TDGJmr@S2q(r73P!0c%$$u*uy&;p8~VVi}`7P-)@-u@^I0~W(&n3exVo5dN}Ekq;f=;4dzN<&PT2$ib?8RQ diff --git a/clustershell_IHM/configuration_IHM.ui b/clustershell_IHM/configuration_IHM.ui old mode 100644 new mode 100755 diff --git a/clustershell_IHM/etatnoeud_IHM.py b/clustershell_IHM/etatnoeud_IHM.py old mode 100644 new mode 100755 diff --git a/clustershell_IHM/etatnoeud_IHM.pyc b/clustershell_IHM/etatnoeud_IHM.pyc index b37d26ae5304b47bf5f0c733812b72093be41854..cb7d44501af0d0b103e03b3d7c1c78d0bed949c6 100644 GIT binary patch delta 245 zcmaE^@kfK5`7z*Q}arSC)e;BPmW;R whF?J#Qyo49Mw_LXeRy!H*j&T^oe8Hb&;>@5cL_z}R}dvU2cH7t$#x=|08$H35&!@I delta 224 zcmeyP@mzzQ`7