예제 #1
0
class FlowerPi(object):
    
    def __init__(self):
        self.hardware = Hardware()
        a = Astral()
        a.solar_depression = 'civil'
        self.city = a['Kiev']
        self.rpc_server = RPCServer(self.hardware) 
        self.rpc_server.start()
        
        
    def process(self):
        now = datetime.now()
        print("Processing... Current time: {}".format(str(now)))
        
        sun = self.city.sun(date=now, local=True)
        sunrise = sun['sunrise']
        sunset = sun['sunset']
        
        if sunrise.hour == now.hour and sunrise.minute == now.minute:
            print("Sunrise. Time: {}".format(str(now)))
            self.hardware.turn_lamp_low()
            
        if sunset.hour == now.hour and sunset.minute == now.minute:
            print("Sunset. Time: {}".format(str(now)))
            self.hardware.turn_lamp_off()
예제 #2
0
def helpFuncs():
  from pprint import pprint
  rpcServer = RPCServer.getInstance()
  methods = listFuncs()
  for mName in listFuncs():
    rpcServer.getBatchServer().system.methodHelp(mName)
  
  methodsHelp = zip(methods, rpcServer.getBatchServer()())
  RPCServer.getInstance().resetBatch()
  pprint(dict(methodsHelp))
예제 #3
0
def runBatch(reset = True):
  res = RPCServer.getInstance().getBatchServer()()
  if reset:
    RPCServer.getInstance().resetBatch()
    endBatch()
  resultsList = []
  for r in res:
    if isinstance(r, str):
      tpe = r.split("-",1)[0]
      resInstance = eval( "%s(id='%s')" % (tpe, r) )
      resultsList.append(resInstance)
    else:
      resultsList.append(r)

  return resultsList
예제 #4
0
 def __init__(self):
     self.hardware = Hardware()
     a = Astral()
     a.solar_depression = 'civil'
     self.city = a['Kiev']
     self.rpc_server = RPCServer(self.hardware) 
     self.rpc_server.start()
예제 #5
0
    def fork_process(self, index, processor_cls):
        if index == self.__server_count:
            return

        forkPID = os.fork()
        if forkPID == 0:
            server = RPCServer(self.__zk_address,
                               self.__zk_path,
                               self.__zk_version,
                               self.__handler,
                               self.__address,
                               self.__port[index],
                               self.__weight,
                               self.__zk_timeout)
            server.start(processor_cls)
        else:
            index += 1
            self.__processores.append(forkPID)
            self.fork_process(index, processor_cls)
예제 #6
0
class HAInstance(object):
    server = RPCServer.get_rpc_server()
    instance_list = None
    ha_instance_list = None
    host = subprocess.check_output(['hostname']).strip()

    @staticmethod
    def init():
        HAInstance.instance_list = []
        HAInstance.ha_instance_list = {}

    @staticmethod
    def get_instance_from_controller():
        # host_instance = {}
        try:
            cluster_list = HAInstance.server.listCluster()
            for cluster in cluster_list:
                cluster_uuid = cluster[0]
                HAInstance.ha_instance_list[cluster_uuid] = HAInstance._get_ha_instance(cluster_uuid)
            host_instance = HAInstance._get_instance_by_node(HAInstance.ha_instance_list)
            for cluster_id, instance_list in host_instance.iteritems():
                for instance in instance_list:
                    HAInstance.add_instance(cluster_id, instance)
        except Exception as e:
            message = "HAInstance get_instance_from_controller Except:" + str(e)
            logging.error(message)
            print(message)

    @staticmethod
    def _get_ha_instance(cluster_id):
        instance_list = []
        try:
            instance_list = HAInstance.server.listInstance(cluster_id, False)["data"]["instance_list"]
        except Exception as e:
            message = "_get_ha_instance--get instance list from controller(rpc server) fail" + str(e)
            # instance_list = []
            logging.error(message)
        finally:
            return instance_list

    @staticmethod
    def _get_instance_by_node(instance_lists):
        for id, instance_list in instance_lists.iteritems():
            for instance in instance_list[:]:
                if HAInstance.host not in instance[2]:
                    # print instance[2]
                    instance_list.remove(instance)
        return instance_lists

    @staticmethod
    def add_instance(cluster_id, instance):
        """

        :param cluster_id:
        :param instance:
        """
        print("add vm")
        vm = Instance(cluster_id = cluster_id, ha_instance = instance)
        HAInstance.instance_list.append(vm)

    @staticmethod
    def get_instance_list():
        return HAInstance.instance_list

    @staticmethod
    def get_instance(name):
        """

        :param name:
        :return:
        """
        for instance in HAInstance.instance_list:
            if instance.name == name:
                return instance
        return None

    @staticmethod
    def update_ha_instance():
        HAInstance.init()
        HAInstance.get_instance_from_controller()
        print("update HA Instance finish")
예제 #7
0
 def __init__(self):
     self.nova_client = NovaClient.get_instance()
     self.server = RPCServer.get_rpc_server()
     self.vm_name = None
     self.failed_info = None
     self.recovery_type = ""
예제 #8
0
def initializeClient(configFileName = 'config.cfg'):
  global global_config
  global clientId
  global createCount
  global gcThreshold
  createCount = 0
  global_config = Configuration(configFileName)
  rpcServer = RPCServer.getInstance( global_config.RPCServerURL )
  clientId = rpcServer.getServer()._requestClientId()
  gcThreshold = global_config.GCThreshold
  global filteredMethods
  filteredMethods = filter(lambda mName: mName[:7] != 'system.' and mName[0] != '_', 
                            rpcServer.getInteractiveServer().system.listMethods())

  proxyFuncsSrc = """def %(methodName)s(*args):
    \"\"\"%(methodHelp)s\"\"\"
    global createCount
    global gcThreshold 
    mName = '%(methodName)s'
    newArgs = [clientId]
    rpcServer = RPCServer.getInstance()


    for arg in args:
      if type(arg) in ( type(()), type([]) ):
        newArgs.append( __elemsToStr(arg) )
      elif isinstance(arg, Variable):
        newArgs.append(arg.getId())
      else:
        newArgs.append(arg)
    try:
      result = rpcServer.getServer().%(methodName)s(*newArgs)
    except:
      raise


    #result's first chars before the "-" indicate the type of the result
    #UNLESS the result is an string repr of the number, in which case
    #it is not processed
    if isinstance(result, str):
      tpe = result.split("-",1)[0]
      if tpe.isalpha():
        strToEval = "%%s(id='%%s')" %% (tpe, result)
        result = eval(strToEval)

    if mName.endswith("Create"):
      createCount += 1
      if createCount > gcThreshold:
        runGC(result.getId())
        createCount = 0


    return result
"""
  for mName in filteredMethods:
    rpcServer.getBatchServer().system.methodHelp(mName)
  
  methodsHelp = zip(filteredMethods, rpcServer.getBatchServer()())
  for methodAndHelpPair in methodsHelp:
    exec proxyFuncsSrc % \
    {'methodName': methodAndHelpPair[0], 
     'methodHelp': methodAndHelpPair[1]
    } in globals()

  return globals()
예제 #9
0
def endBatch():
  RPCServer.getInstance().setBatch(False)
예제 #10
0
def runBatch(reset = True):
  res = RPCServer.getInstance().getBatchServer()()
  if reset:
    RPCServer.getInstance().resetBatch()
  return [x for x in res]
예제 #11
0
def beginBatch():
  RPCServer.getInstance().setBatch(True)