source: lliurex-up/trunk/fuentes/lliurex-up/usr/share/lliurex-up/LliurexUpConnect.py @ 3690

Last change on this file since 3690 was 3690, checked in by jrpelegrina, 2 years ago

WIP in clients checks

File size: 11.9 KB
Line 
1import xmlrpclib 
2import os
3import shutil
4import subprocess
5import socket
6import threading
7import datetime
8import math
9#from math import pi
10
11import lliurex.lliurexup as LliurexUpCore
12
13from gi.repository import Gtk, Gdk, GObject, GLib, PangoCairo, Pango
14
15import signal
16signal.signal(signal.SIGINT, signal.SIG_DFL)
17
18
19class LliurexUpConnect():
20
21        def __init__(self):
22
23                self.llxUpCore=LliurexUpCore.LliurexUpCore()
24                GObject.threads_init()
25                log_msg="------------------------------------------\n"+"LLIUREX-UP-GUI STARTING AT: " + datetime.datetime.today().strftime("%d/%m/%y %H:%M:%S") +"\n------------------------------------------"
26                self.log(log_msg)
27               
28
29
30                #self.saveTargetMetapackagePath=os.path.join(self.llxUpCore.processPath,"targetMetapackage")
31                self.preactions_token=os.path.join(self.llxUpCore.processPath,'preactions_token')
32                self.upgrade_token=os.path.join(self.llxUpCore.processPath,'upgrade_token')
33                self.installflavour_token=os.path.join(self.llxUpCore.processPath,'installflavour_token')
34                self.postactions_token=os.path.join(self.llxUpCore.processPath,'postactions_token')
35                self.errorpostaction_token=os.path.join(self.llxUpCore.processPath,'errorpostaction_token')
36                self.errorupgrade_token=os.path.join(self.llxUpCore.processPath,'errorupgrade_token')
37                self.finalupgrade_token=os.path.join(self.llxUpCore.processPath,'finalupgrade_token')
38                self.checkInitialFlavour()
39
40
41        #def __init__   
42
43
44        def checkInitialFlavour(self):
45
46                self.targetMetapackage=self.llxUpCore.checkInitialFlavour()
47                log_msg="Initial check metapackage. Metapackage to install: " + str(self.targetMetapackage)
48                self.log(log_msg)
49                self.previousFlavours=self.llxUpCore.previousFlavours
50                log_msg="Get initial metapackage: " + str(self.previousFlavours)
51                self.log(log_msg)
52                return self.targetMetapackage
53
54        #def checkFlavoour
55
56
57        def canConnectToLliurexNet(self):
58
59                can_connect=self.llxUpCore.canConnectToLliurexNet()
60
61                if can_connect:
62                        log_msg="Can connect to lliurex.net: True"
63                        self.log(log_msg)
64                        return True
65
66                else:
67                        log_msg="Can connect to lliurex.net: False"
68                        self.log(log_msg)
69                        if "lliurex-meta-server" == self.targetMetapackage or "server" in self.llxUpCore.previousFlavours:
70                                return False
71                        else:
72                                return True             
73
74        #def canConnectToLliurexNet
75
76
77        def initActionsScript(self):
78               
79                arg="initActions"
80                command=self.llxUpCore.initActionsScript(arg)
81               
82                try:
83                        os.system(command)
84                        log_msg="Exec Init-Actions"
85                        self.log(log_msg)
86                        return True
87
88                except Exception as e:
89                        log_msg="Exec Init-Actions.Error: " +str(e)
90                        self.log(log_msg)
91                        return False           
92
93        #def initActionsScript 
94
95        def clientCheckingMirrorIsRunning(self):
96
97                is_mirror_running_inserver=self.llxUpCore.clientCheckingMirrorIsRunning()
98                return is_mirror_running_inserver
99
100
101               
102        def isLliurexUpIsUpdated(self):
103
104                try:
105                        is_lliurexup_updated=self.llxUpCore.isLliurexUpIsUpdated()
106                        log_msg="Checking lliurex-up. Is lliurex-up updated: "+ str(is_lliurexup_updated)
107                        self.log(log_msg)
108                        return is_lliurexup_updated
109               
110                except Exception as e:
111                        log_msg="Checking lliurex-up. Error: " + str(e)
112                        self.log(log_msg)
113                        return True
114
115        #def isLliurexUpIsUpdated
116
117        def installLliurexUp(self):
118
119                try:
120                        is_lliurexup_installed=self.llxUpCore.installLliurexUp()
121                        returncode=is_lliurexup_installed['returncode']
122                        error=is_lliurexup_installed['stderrs']
123                        log_msg="Installing lliurex-up. Returncode: " + str(returncode) + ". Error: " + str(error)
124                        self.log(log_msg)
125                        return returncode
126                       
127                except Exception as e:
128                        log_msg="Installing lliurex-up. Error: " + str(e)
129                        self.log(log_msg)
130                        return True
131
132        #def installLliurexUp   
133
134       
135        def lliurexMirrorIsUpdated(self):
136
137                try:
138                        is_mirror_updated=self.llxUpCore.lliurexMirrorIsUpdated()
139
140                        if is_mirror_updated !=None:
141                       
142                                if is_mirror_updated['action']=='update':
143                                        log_msg="Checking mirror. Is mirror update: False"
144                                        self.log(log_msg)
145                                        return False
146                                else: 
147                                        log_msg="Checking mirror. Is mirror update: " + is_mirror_updated['action']
148                                        self.log(log_msg)
149                                        return True
150                        else:
151                                log_msg="Checking mirror. Is mirror update: None"
152                                self.log(log_msg)
153                                return True
154               
155               
156                except Exception as e:
157                        log_msg="Checking mirror. Error: " + str(e)
158                        self.log(log_msg)
159                        return True     
160
161        #def lliurexMirrorIsUpdated             
162
163        def lliurexMirrorIsRunning(self):
164
165                try:
166                        is_lliurexmirror_running=self.llxUpCore.lliurexMirrorIsRunning()
167                        return is_lliurexmirror_running
168
169                except Exception as e:
170                        log_msg="Updating mirror. Error: " + str(e)
171                        self.log(log_msg)
172                        return False
173
174        #def lliurexMirrorIsRunning             
175
176        def getPercentageLliurexMirror(self):
177
178                try:
179                        percentage_mirror=self.llxUpCore.getPercentageLliurexMirror()
180                        if percentage_mirror != None:
181                                return percentage_mirror
182                        else:
183                                return 0       
184               
185                except Exception as e:
186                        return 0       
187
188
189        #def getPercentageLliurexMirror
190
191        def getLliurexVersionLocal(self):
192               
193                try:
194                       
195                        self.lliurexVersionLocal=self.llxUpCore.getLliurexVersionLocal()
196                        log_msg="Get LliurexVersion installed: " + str(self.lliurexVersionLocal["installed"])
197                        self.log(log_msg)
198                        log_msg="Get LliurexVersion candidate from Local repository: " + str(self.lliurexVersionLocal["candidate"])
199                        self.log(log_msg)
200                        #self.lliurexVersionLocal=self.lliurexVersionLocal["candidate"]
201
202                except Exception as e:
203                        log_msg="Get LliurexVersion from Local repository. Error: " + str(e)
204                        self.log(log_msg)
205                        self.lliurexVersionLocal={"installed":None,"candidate":None}
206
207                return self.lliurexVersionLocal
208
209        #def getLliurexVersionLocal(
210       
211        def getLliurexVersionNet(self):
212               
213                try:
214                        self.lliurexVersionNet=self.llxUpCore.getLliurexVersionLliurexNet()["candidate"]
215                        log_msg="Get LliurexVersion candidate from Lliurex Net: " + str(self.lliurexVersionNet)
216                        self.log(log_msg)
217                       
218
219                except Exception as e:
220                        log_msg="Get LliurexVersion from Lliurex Net. Error: " + str(e)
221                        self.log(log_msg)
222                        self.lliurexVersionNet=None
223
224                return self.lliurexVersionNet   
225
226        #def getLliurexVersionNet
227       
228        def installInitialFlavour(self,flavourToInstall):
229
230                try:
231                        is_flavour_installed=self.llxUpCore.installInitialFlavour(flavourToInstall)
232                        returncode=is_flavour_installed['returncode']
233                        error=is_flavour_installed['stderrs']
234                        log_msg="Install initial metapackage:" + flavourToInstall + ": Returncode: " + str(returncode) + " Error: " + str(error)
235                        self.log(log_msg)
236                        return returncode
237
238                except Exception as e:
239                        print str(e)
240                        log_msg="Install initial metapackage: " + flavourToInstall + ". Error: " + str(e)
241                        self.log(log_msg)
242                        return 1
243                       
244        #def installInitialFlavour
245
246        def getPackagesToUpdate(self):
247               
248                #ref_flavour=["lliurex-meta-server","lliurex-meta-client", "lliurex-meta-desktop", "lliurex-meta-music", "lliurex-meta-pyme", "lliurex-meta-infantil"]
249                packages_parse=[]
250                self.total_size=0
251                #self.incorrect_flavours=[]
252               
253                try:
254                        packages=self.llxUpCore.getPackagesToUpdate()
255                        if len(packages)>0:
256                                for item in packages:
257                                        version=packages[item]['candidate']
258                                        size=self.getSizePackagesToUpdate(item)
259                                        install=str(packages[item]['install'])
260                                        packages_parse.append(item+";"+version+";"+size+";"+install)
261                                       
262                        log_msg="Get packages to update. Number of packages: " + str(len(packages)) 
263                        self.log(log_msg)               
264
265                except Exception as e:
266                        log_msg="Get packages to update. Error: " + str(e)
267                        self.log(log_msg)
268
269                self.total_size=self.convert_size(self.total_size)     
270                return packages_parse,self.total_size
271                       
272        #def getPackagesToUpdate
273       
274        def getSizePackagesToUpdate(self,pkg):
275                size=0
276                try:
277                        command='apt-cache show ' + pkg + ' |grep "^Size:" |cut -d " " -f2 |head -1'
278                        p=subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
279                        size=p.stdout.readline().strip()
280                        self.total_size=(self.total_size)+int(size)
281                        size=self.convert_size(size)
282                        return size
283
284                except Exception as e:
285                        print e
286                        return self.convert_size(size) 
287       
288
289        def convert_size(self,size_bytes):
290
291                size_bytes=float(size_bytes)
292                if (size_bytes == 0):
293                        return '0B'
294
295                size_name = ("B", "KB", "MB", "GB")
296                i = int(math.floor(math.log(size_bytes, 1024)))
297                p = math.pow(1024, i)
298                s = round(size_bytes/p,)
299                s=int(s)
300                return '%s %s' % (s, size_name[i])
301
302       
303        def checkIncorrectFlavours(self):
304
305                incorrectFlavours=self.llxUpCore.checkIncorrectFlavours()
306
307                if incorrectFlavours:
308                        log_msg="Checking incorrect metapackages. Others metapackages detected: " + str(incorrectFlavours)
309                        self.log(log_msg)
310                else:
311                        log_msg="Checking incorrect metapackages. Others metapackages not detected"
312                        self.log(log_msg)
313
314                return incorrectFlavours       
315
316        #def checkIncorrectFlavours     
317
318        def getPackageChangelog(self,package):
319
320                changelog_file=os.path.join(self.llxUpCore.changelogsPath,package)
321
322                if not os.path.exists(changelog_file):
323                        os.system('LANG=C LANGUAGE=en apt-get changelog %s > %s'%(package,changelog_file))
324
325                try:
326                        cmd="sed -i '/Get:1 http/d' " + str(changelog_file)
327                        os.system(cmd)
328                        f=open(changelog_file,"r")
329                        changelog=f.readlines()
330                        f.close()
331                                               
332                except Exception as e:
333                        changelog="Changelog not found" 
334
335                return changelog       
336
337        #def getPackageChangelog               
338
339        def preActionsScript(self):
340
341                self.preActions=self.llxUpCore.preActionsScript()
342                self.preActions=self.preActions + ' ;touch ' + self.preactions_token + '\n'
343                log_msg="Exec Pre-Actions"
344                self.log(log_msg)
345                return self.preActions
346
347        #def preActionsScript   
348
349        def distUpgradeProcess(self):
350               
351                self.distupgrade=self.llxUpCore.distUpgradeProcess()   
352                self.distupgrade='DEBIAN_FRONTEND=gnome DEBIAN_PRIORITY=high ' +self.distupgrade + ' ;touch ' + self.upgrade_token + '\n'
353                log_msg="Exec Dist-uggrade"
354                self.log(log_msg)
355                return self.distupgrade
356
357        #def distUpgradeProcess
358       
359        def checkErrorDistUpgrade(self):
360
361                try:
362                        error=self.llxUpCore.checkErrorDistUpgrade()
363                        if error:
364                                log_msg="Dist-upgrade process ending with errors"
365                                self.log(log_msg)
366                        else:                   
367                                log_msg="Dist-upgrade process ending OK"
368                                self.log(log_msg)
369
370                except Exception as e:
371                        print e
372                        log_msg="Error checking distupgrade. Error: " + str(e)
373                        self.log(log_msg)
374                        error=True
375
376                return error   
377                               
378
379        #def checkErrorDistUpgrade
380       
381        def getStatusPackage(self):
382
383                command='dpkg -l |grep "^i[i]"'
384                packages_status=[]
385                try:
386                        p = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
387                        for line in iter(p.stdout.readline,""):
388                                tmp=str(line.strip().split()[1].split(":")[0])+"_"+str(line.strip().split()[2])
389                                packages_status.append(tmp)
390
391                except Exception as e:
392                        print str(e)
393
394                return packages_status                                         
395 
396        def checkFinalFlavour(self):
397
398                flavourToInstall=None
399                try:
400               
401                        flavourToInstall=self.llxUpCore.checkFinalFlavour()
402                        log_msg="Final check metapackage. Metapackage to install: " + str(flavourToInstall)
403                        self.log(log_msg)
404
405                except Exception as e:
406                        log_msg="Final check metapackage. Error: " + str(e)
407                        self.log(log_msg)
408
409                return flavourToInstall
410
411       
412        #def checkFinalFlavour
413       
414        def installFinalFlavour(self,flavourToInstall):
415
416                self.command=self.llxUpCore.installFinalFlavour(flavourToInstall)
417                self.command='DEBIAN_FRONTEND=gnome DEBIAN_PRIORITY=high ' +self.command + ' ;touch ' + self.installflavour_token + ' ; exit'+' \n'
418                log_msg="Install final metapackage"
419                self.log(log_msg)
420                return self.command
421
422        #def installFinalFlavour
423
424        def postActionsScript(self):
425
426                self.postActions=self.llxUpCore.postActionsScript()
427                self.postActions=self.postActions + ' 2> >(tee ' + self.llxUpCore.errorpostaction_token + ') ;touch ' + self.postactions_token + ' \n'
428                #self.postActions=self.postActions + ' ;touch ' + self.postactions_token + ' \n'
429
430                log_msg="Exec Post-Actions"
431                self.log(log_msg)
432                return self.postActions
433
434        #def postActionsScript
435
436        def cleanEnvironment(self):
437               
438                try:
439                        self.llxUpCore.cleanEnvironment()
440                        log_msg="Clean environment: OK"
441                        self.log(log_msg)
442
443                except Exception as e:
444                        log_msg="Clean environment. Error :" + str(e)
445                        self.log(log_msg)                               
446
447        #def cleanEnvironment
448
449        def cleanLliurexUpLock(self):
450
451                try:
452                        self.llxUpCore.cleanLliurexUpLock()
453               
454                except Exception as e:
455                        print e
456                       
457        def log(self,msg):
458               
459                log_file="/var/log/lliurex-up.log"
460                f=open(log_file,"a+")
461                f.write(msg + '\n')
462                f.close()
463
464        #def log                       
Note: See TracBrowser for help on using the repository browser.