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

Last change on this file since 3494 was 3493, checked in by jrpelegrina, 3 years ago

Add log in n cli and add sources for client

File size: 14.6 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                log_msg="Get initial flavours: " + str(self.llxUpCore.previuosFlavours)
50                self.log(log_msg)
51                return self.targetMetapackage
52
53                # try:
54                #       self.targetMetapackage=self.llxUpCore.checkFlavour()
55                #       log_msg="Initial check metapackage. Metapackage to install: " + str(self.targetMetapackage)
56                #       self.log(log_msg)
57                       
58                #       #if self.targetMetapackage !=None:
59                #       self.metapackageRef=self.llxUpCore.metapackageRef
60                #       if len(self.metapackageRef)==0:
61                #               self.llxUpCore.getTargetMetapackage()
62         #              self.metapackageRef=sorted(self.metapackageRef)
63                         
64                #       self.previousFlavours=self.llxUpCore.previuosFlavours
65                #       if len(self.previousFlavours)==0:
66                #               self.llxUpCore.getPreviuosFlavours()
67                       
68                #       log_msg="Get initial flavours: " + str(self.previousFlavours)
69                #       self.log(log_msg)
70                 
71                # except Exception as e:
72                #       log_msg="Initial check metapackage. Error: " + str(e)
73                #       self.log(log_msg)
74
75                # return self.targetMetapackage
76
77        #def checkFlavoour
78
79
80        # def saveTargetMetapackage(self):
81
82        #       try:
83        #               aux=open(self.saveTargetMetapackagePath,'w')
84        #               x=self.targetMetapackage.split("-")[2]
85        #               aux.write(x+"\n")
86        #               x="edu"
87        #               aux.write(x+"\n")
88        #               aux.close()
89
90        #       except Exception as e:
91        #               print str(e)   
92
93        def requiresInstallFlavour(self):
94
95                log_msg="Get update flavours: " + str(self.llxUpCore.flavours)
96                self.log(log_msg)
97                flavourToInstall=self.llxUpCore.requiresInstallFlavour()
98
99                if flavourToInstall !=None:
100                        log_msg="Requires Install this Flavour: " + str(flavourToInstall)
101                        self.log(log_msg)
102
103                else:
104                        log_msg="Requires Install Flavour: No"
105                        self.log(log_msg)
106
107                return flavourToInstall
108                # self.flavours=self.llxUpCore.flavours
109                # log_msg="Get update flavours: " + str(self.flavours)
110                # self.log(log_msg)
111
112                # if not 'None' in self.previousFlavours:
113                #       if self.previousFlavours !=self.flavours:
114                #               flavourToInstall=self.parseFlavourToInstall(self.previousFlavours)
115                #               log_msg="Requires Install this Flavour: " + str(flavourToInstall)
116                #               self.log(log_msg)
117                               
118                #       else:
119                #               log_msg="Requires Install Flavour: No"
120                #               self.log(log_msg)       
121                                                       
122                # else:
123                #       log_msg="Flavours reference: " + str(self.metapackageRef)
124                #       self.log(log_msg)
125                #       if self.metapackageRef != self.flavours:
126                #               flavourToInstall=self.parseFlavourToInstall(self.metapackageRef)
127
128                #               log_msg="Requires Install this Flavour: " + str(flavourToInstall)
129                #               self.log(log_msg)
130                #       else:
131                #               log_msg="Requires Install Flavour: No"
132                #               self.log(log_msg)
133
134                # return flavourToInstall                                               
135                       
136        #def requiresInstallFlavour
137       
138        # def parseFlavourToInstall(self,flavours):
139       
140        #       parse_flavour=""
141
142        #       for item in flavours:
143        #               if item != "edu":
144        #                       parse_flavour=parse_flavour + " " + "lliurex-meta-" + item
145
146        #       return parse_flavour
147                       
148        #def parseFlavourToInstall(
149       
150        def canConnectToLliurexNet(self):
151
152                try:
153                        can_connect=self.llxUpCore.canConnectToLliurexNet()
154                        if can_connect:
155                                return True 
156                        else:
157                                return False
158                except:
159                        return False
160
161        #def canConnectToLliurexNet
162
163
164        def initActionsScript(self):
165               
166                arg="initActions"
167                command=self.llxUpCore.initActionsScript(arg)
168               
169                try:
170                        os.system(command)
171                        log_msg="Exec Init-Actions"
172                        self.log(log_msg)
173                        return True
174
175                except Exception as e:
176                        log_msg="Exec Init-Actions.Error: " +str(e)
177                        self.log(log_msg)
178                        return False           
179
180        #def initActionsScript 
181               
182        def isLliurexUpIsUpdated(self):
183
184                try:
185                        is_lliurexup_updated=self.llxUpCore.isLliurexUpIsUpdated()
186                        log_msg="Checking lliurex-up. Is lliurex-up updated: "+ str(is_lliurexup_updated)
187                        self.log(log_msg)
188                        return is_lliurexup_updated
189               
190                except Exception as e:
191                        log_msg="Checking lliurex-up. Error: " + str(e)
192                        self.log(log_msg)
193                        return True
194
195        #def isLliurexUpIsUpdated
196
197        def installLliurexUp(self):
198
199                try:
200                        is_lliurexup_installed=self.llxUpCore.installLliurexUp()
201                        returncode=is_lliurexup_installed['returncode']
202                        error=is_lliurexup_installed['stderrs']
203                        log_msg="Installing lliurex-up. Returncode: " + str(returncode) + ". Error: " + str(error)
204                        self.log(log_msg)
205                        return returncode
206                       
207                except Exception as e:
208                        log_msg="Installing lliurex-up. Error: " + str(e)
209                        self.log(log_msg)
210                        return True
211
212        #def installLliurexUp   
213
214       
215        def lliurexMirrorIsUpdated(self):
216
217                try:
218                        is_mirror_updated=self.llxUpCore.lliurexMirrorIsUpdated()
219
220                        if is_mirror_updated !=None:
221                       
222                                if is_mirror_updated['action']=='update':
223                                        log_msg="Checking mirror. Is mirror update: False"
224                                        self.log(log_msg)
225                                        return False
226                                else: 
227                                        log_msg="Checking mirror. Is mirror update: " + is_mirror_updated['action']
228                                        self.log(log_msg)
229                                        return True
230                        else:
231                                log_msg="Checking mirror. Is mirror update: None"
232                                self.log(log_msg)
233                                return True
234               
235               
236                except Exception as e:
237                        log_msg="Checking mirror. Error: " + str(e)
238                        self.log(log_msg)
239                        return True     
240
241        #def lliurexMirrorIsUpdated             
242
243        def lliurexMirrorIsRunning(self):
244
245                try:
246                        is_lliurexmirror_running=self.llxUpCore.lliurexMirrorIsRunning()
247                        return is_lliurexmirror_running
248
249                except Exception as e:
250                        log_msg="Updating mirror. Error: " + str(e)
251                        self.log(log_msg)
252                        return False
253
254        #def lliurexMirrorIsRunning             
255
256        def getPercentageLliurexMirror(self):
257
258                try:
259                        percentage_mirror=self.llxUpCore.getPercentageLliurexMirror()
260                        if percentage_mirror != None:
261                                return percentage_mirror
262                        else:
263                                return 0       
264               
265                except Exception as e:
266                        return 0       
267
268
269        #def getPercentageLliurexMirror
270
271        def getLliurexVersionLocal(self):
272               
273                try:
274                       
275                        self.lliurexVersionLocal=self.llxUpCore.getLliurexVersionLocal()
276                        log_msg="Get LliurexVersion installed: " + str(self.lliurexVersionLocal["installed"])
277                        self.log(log_msg)
278                        log_msg="Get LliurexVersion candidate from Local repository: " + str(self.lliurexVersionLocal["candidate"])
279                        self.log(log_msg)
280                        #self.lliurexVersionLocal=self.lliurexVersionLocal["candidate"]
281
282                except Exception as e:
283                        log_msg="Get LliurexVersion from Local repository. Error: " + str(e)
284                        self.log(log_msg)
285                        self.lliurexVersionLocal={"installed":None,"candidate":None}
286
287                return self.lliurexVersionLocal
288
289        #def getLliurexVersionLocal(
290       
291        def getLliurexVersionNet(self):
292               
293                try:
294                        self.lliurexVersionNet=self.llxUpCore.getLliurexVersionLliurexNet()["candidate"]
295                        log_msg="Get LliurexVersion candidate from Lliurex Net: " + str(self.lliurexVersionNet)
296                        self.log(log_msg)
297                       
298
299                except Exception as e:
300                        log_msg="Get LliurexVersion from Lliurex Net. Error: " + str(e)
301                        self.log(log_msg)
302                        self.lliurexVersionNet=None
303
304                return self.lliurexVersionNet   
305
306        #def getLliurexVersionNet
307       
308        def installInitialFlavour(self,flavourToInstall):
309
310                try:
311                        is_flavour_installed=self.llxUpCore.installInitialFlavour(flavourToInstall)
312                        returncode=is_flavour_installed['returncode']
313                        error=is_flavour_installed['stderrs']
314                        log_msg="Install initial flavour:" + flavourToInstall + ": Returncode: " + str(returncode) + " Error: " + str(error)
315                        self.log(log_msg)
316                        return returncode
317
318                except Exception as e:
319                        print str(e)
320                        log_msg="Install initial flavour: " + flavourToInstall + ". Error: " + str(e)
321                        self.log(log_msg)
322                        return
323                       
324        #def installInitialFlavour
325
326        def getPackagesToUpdate(self):
327               
328                #ref_flavour=["lliurex-meta-server","lliurex-meta-client", "lliurex-meta-desktop", "lliurex-meta-music", "lliurex-meta-pyme", "lliurex-meta-infantil"]
329                packages_parse=[]
330                self.total_size=0
331                #self.incorrect_flavours=[]
332               
333                try:
334                        packages=self.llxUpCore.getPackagesToUpdate()
335                        if len(packages)>0:
336                                for item in packages:
337                                        version=packages[item]['candidate']
338                                        size=self.getSizePackagesToUpdate(item)
339                                        install=str(packages[item]['install'])
340                                        packages_parse.append(item+";"+version+";"+size+";"+install)
341                                       
342                        log_msg="Get packages to update. Number of packages: " + str(len(packages)) 
343                        self.log(log_msg)               
344
345                except Exception as e:
346                        log_msg="Get packages to update. Error: " + str(e)
347                        self.log(log_msg)
348
349                self.total_size=self.convert_size(self.total_size)     
350                return packages_parse,self.total_size
351                       
352        #def getPackagesToUpdate
353       
354        def getSizePackagesToUpdate(self,pkg):
355                size=0
356                try:
357                        command='apt-cache show ' + pkg + ' |grep "^Size:" |cut -d " " -f2 |head -1'
358                        p=subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
359                        size=p.stdout.readline().strip()
360                        self.total_size=(self.total_size)+int(size)
361                        size=self.convert_size(size)
362                        return size
363
364                except Exception as e:
365                        print e
366                        return self.convert_size(size) 
367       
368
369        def convert_size(self,size_bytes):
370
371                size_bytes=float(size_bytes)
372                if (size_bytes == 0):
373                        return '0B'
374
375                size_name = ("B", "KB", "MB", "GB")
376                i = int(math.floor(math.log(size_bytes, 1024)))
377                p = math.pow(1024, i)
378                s = round(size_bytes/p,)
379                s=int(s)
380                return '%s %s' % (s, size_name[i])
381
382       
383        def checkIncorrectFlavours(self):
384
385                incorrectFlavours=self.llxUpCore.checkIncorrectFlavours()
386
387                if incorrectFlavours:
388                        log_msg="Checking incorrect flavours. Others flavours detected: " + str(incorrectFlavours)
389                        self.log(log_msg)
390                else:
391                        log_msg="Checking incorrect flavours. Others flavours no detected"
392                        self.log(log_msg)
393
394                return incorrectFlavours       
395
396        #def checkIncorrectFlavours     
397
398        def preActionsScript(self):
399
400                self.preActions=self.llxUpCore.preActionsScript()
401                self.preActions=self.preActions + ' ;touch ' + self.preactions_token + '\n'
402                log_msg="Exec Pre-Actions"
403                self.log(log_msg)
404                return self.preActions
405
406        #def preActionsScript   
407
408        def distUpgradeProcess(self):
409               
410                self.distupgrade=self.llxUpCore.distUpgradeProcess()   
411                self.distupgrade='DEBIAN_FRONTEND=gnome DEBIAN_PRIORITY=high ' +self.distupgrade + ' ;touch ' + self.upgrade_token + '\n'
412                log_msg="Exec Dist-uggrade"
413                self.log(log_msg)
414                return self.distupgrade
415
416        #def distUpgradeProcess
417       
418        def checkErrorDistUpgrade(self):
419
420                try:
421                        error=self.llxUpCore.checkErrorDistUpgrade()
422                        if error:
423                                log_msg="Dist-upgrade process ending with errors"
424                                self.log(log_msg)
425                        else:                   
426                                log_msg="Dist-upgrade process ending OK"
427                                self.log(log_msg)
428
429                except Exception as e:
430                        print e
431                        log_msg="Error checking distupgrade. Error: " + str(e)
432                        self.log(log_msg)
433                        error=True
434
435                return error   
436                # count=0
437                # error=False
438
439                # if os.path.exists(self.errorpostaction_token):
440                #       aux = open(self.errorpostaction_token,'r')
441                #       lines = aux.readlines()
442                #       for x in lines:
443                #               if 'E: ' in x:
444                #                       count=count+1
445                #       aux.close()
446
447                # if count==0:
448                #       cmd='dpkg -l | grep "^i[^i]" >' + self.errorupgrade_token
449                #       os.system(cmd)
450               
451                #       if os.path.exists(self.errorupgrade_token):
452                #               aux = open(self.errorupgrade_token,'r')
453                #               lines = aux.readlines()
454                #               aux.close()
455                       
456                #               if len(lines)>0:
457                #                       error=True
458                #                       #log_msg="Dist-upgrade process ending with errors"
459                #                       #self.log(log_msg)
460                #               else:
461                #                       j=0
462                #                       cmd='apt-get dist-upgrade -sV >' + self.finalupgrade_token
463                #                       os.system(cmd)
464                #                       if os.path.exists(self.finalupgrade_token):
465                #                               aux = open(self.finalupgrade_token,'r')
466                #                               lines = aux.readlines()
467                #                               aux.close()
468
469                #                               for x in lines:
470                #                                       if 'Inst' in x:
471                #                                               j=j+1
472
473                #                               if j>0:
474                #                                       error=True             
475                # else:
476                #       error=True
477
478                # if error:
479                #       log_msg="Dist-upgrade process ending with errors"
480                #       self.log(log_msg)
481                # else:                 
482                #       log_msg="Dist-upgrade process ending OK"
483                #       self.log(log_msg)
484       
485                # return error
486               
487
488        #def checkErrorDistUpgrade
489       
490        def getStatusPackage(self):
491
492                command='dpkg -l |grep "^i[i]"'
493                packages_status=[]
494                try:
495                        p = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
496                        for line in iter(p.stdout.readline,""):
497                                tmp=str(line.strip().split()[1].split(":")[0])+"_"+str(line.strip().split()[2])
498                                packages_status.append(tmp)
499
500                except Exception as e:
501                        print str(e)
502
503                return packages_status                                         
504 
505        def checkFinalFlavour(self):
506
507                flavourToInstall=None
508                try:
509               
510                        flavourToInstall=self.llxUpCore.checkFinalFlavour()
511                        log_msg="Final check metapackage. Metapackage to install: " + str(flavourToInstall)
512                        self.log(log_msg)
513
514                except Exception as e:
515                        log_msg="Final check metapackage. Error: " + str(e)
516                        self.log(log_msg)
517
518                return flavourToInstall
519
520       
521        #def checkFinalFlavour
522       
523        def installFinalFlavour(self,flavourToInstall):
524
525                self.command=self.llxUpCore.installFinalFlavour(flavourToInstall)
526                self.command='DEBIAN_FRONTEND=gnome DEBIAN_PRIORITY=high ' +self.command + ' ;touch ' + self.installflavour_token + ' ; exit'+' \n'
527                log_msg="Install final flavour"
528                self.log(log_msg)
529                return self.command
530
531        #def installFinalFlavour
532
533        def postActionsScript(self):
534
535                self.postActions=self.llxUpCore.postActionsScript()
536                self.postActions=self.postActions + ' 2> >(tee ' + self.llxUpCore.errorpostaction_token + ') ;touch ' + self.postactions_token + ' \n'
537                #self.postActions=self.postActions + ' ;touch ' + self.postactions_token + ' \n'
538
539                log_msg="Exec Post-Actions"
540                self.log(log_msg)
541                return self.postActions
542
543        #def postActionsScript
544
545        def cleanEnvironment(self):
546               
547                try:
548                        self.llxUpCore.cleanEnvironment()
549                        log_msg="Clean environment: OK"
550                        self.log(log_msg)
551
552                except Exception as e:
553                        log_msg="Clean environment. Error :" + str(e)
554                        self.log(log_msg)                               
555
556        #def cleanEnvironment
557                       
558        def log(self,msg):
559               
560                log_file="/var/log/lliurex-up.log"
561                f=open(log_file,"a+")
562                f.write(msg + '\n')
563                f.close()
564
565        #def log                       
Note: See TracBrowser for help on using the repository browser.