You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
calculate-utils-2.2-lib/pym/server/services.py

141 lines
5.3 KiB

#-*- coding: utf-8 -*-
# Copyright 2008-2010 Calculate Ltd. http://www.calculate-linux.org
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import sys, os
from cl_print import color_print
from cl_datavars import DataVars
# translate language
import cl_lang
tr = cl_lang.lang()
tr.setLocalDomain('cl_lib')
tr.setLanguage(sys.modules[__name__])
class services(color_print):
'''Общие методы для серверных программ,
Методы для работы с сервисами'''
clLibVars = False
def createClLibVars(self, clLibVars=False):
"""Создает объект библиотечных переменных"""
if not clLibVars:
clLibVars = DataVars()
# Заменяем значения переменных переменными из env файлов
clLibVars.flIniFile()
# Устанавливаем у объекта атрибут объект переменных
self.clLibVars = clLibVars
return True
def allServicesApi(self):
self.createClLibVars(clLibVars=self.clLibVars)
apiDict = self.clLibVars.Get('cl_api')
if not apiDict or not type(apiDict) is dict:
return []
apiFiles = apiDict.values()
apiObjects = []
for apiFile in apiFiles:
importPath, moduleName = os.path.split(apiFile)
moduleName = moduleName.rpartition(".py")[0]
if not importPath in sys.path:
sys.path.insert(0, importPath)
try:
className = getattr(__import__(moduleName,
globals(), locals(),
['serviceAPI']),
'serviceAPI')
except (ImportError, AttributeError):
self.printERROR(_("Can not import module %s")% apiFile)
return False
try:
apiObjects.append(className())
except:
self.printERROR(_("Can not create API object"))
self.printERROR(_("Module %s")% apiFile)
return False
return apiObjects
def runMethodToAllServices(self, methodName, sortedServices="normal"):
"""Stopped all setup services"""
allServObjs = self.allServicesApi()
if allServObjs is False:
return False
allSetupServObjs = filter(lambda x: x.isSetup(), allServObjs)
def smpPrioritetReverse(objectA, objectB):
'''Comparison of the run priorities of objects
to sort in descending order
'''
prioritetA = objectA.getRunPrioritet()
prioritetB = objectB.getRunPrioritet()
if prioritetA == prioritetB:
return 0
elif prioritetA < prioritetB:
return 1
else:
return -1
def smpPrioritetNormal(objectA, objectB):
'''Comparison of the run priorities of objects
to sort in descending order
'''
prioritetA = objectA.getRunPrioritet()
prioritetB = objectB.getRunPrioritet()
if prioritetA == prioritetB:
return 0
elif prioritetA > prioritetB:
return 1
else:
return -1
if sortedServices == "normal":
smpPrioritet = smpPrioritetNormal
elif sortedServices == "reverse":
smpPrioritet = smpPrioritetReverse
else:
smpPrioritet = smpPrioritetNormal
allSetupServObjs.sort(smpPrioritet)
for service in allSetupServObjs:
if hasattr(service, methodName):
if not getattr(service, methodName)():
return False
else:
self.printERROR(_("Can not found method %(method)s in \
API object service %(service)s") %{'method':methodName,
'service':service.getServiceName()})
return False
return True
def stopAllServices(self):
"""Stop all services that were setup"""
return self.runMethodToAllServices("stop", sortedServices="reverse")
def startAllServices(self):
"""Start all services that were setup"""
return self.runMethodToAllServices("start")
def delRunlevelAllServices(self):
"""Delete all services that were setup from runlevel"""
return self.runMethodToAllServices("delRunlevel",
sortedServices="reverse")
def delVarsFromAllServices(self):
"""Delete template vars from all services"""
return self.runMethodToAllServices("delVarsFromEnv",
sortedServices="reverse")