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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#-*- 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")