manager fixed

Change-Id: I81d9a877ca824022c730f037d126e79cf7104bcf
This commit is contained in:
Lisa Zangrando 2016-05-27 17:35:31 +02:00
parent ab0c9821f1
commit 31d50774e7
6 changed files with 43 additions and 90 deletions

View File

@ -70,29 +70,9 @@ manager_opts = [
cfg.IntOpt("rate", default=60)
]
"""
keystone_opts = [
cfg.StrOpt("admin_user", required=True),
cfg.StrOpt("admin_password", required=True),
cfg.StrOpt("admin_project_name", required=True),
cfg.StrOpt("auth_url", required=True)
]
mysql_opts = [
cfg.StrOpt("host", required=True),
cfg.StrOpt("user", default="synergy"),
cfg.StrOpt("password", required=True),
cfg.StrOpt("db", default="synergy", required=True),
cfg.IntOpt("pool_size", default="10", required=False)
]
"""
cfg.CONF.register_opts(service_opts)
cfg.CONF.register_opts(wsgi_opts, group="WSGI")
cfg.CONF.register_opts(logger_opts, group="Logger")
# cfg.CONF.register_opts(socket_opts)
# cfg.CONF.register_opts(keystone_opts, group="Keystone")
# cfg.CONF.register_opts(mysql_opts, group="MYSQL")
def parse_args(args=None, usage=None, default_config_files=None):

View File

@ -1,8 +1,9 @@
import copy
import datetime
import six
import uuid
from datetime import datetime
__author__ = "Lisa Zangrando"
__email__ = "lisa.zangrando[AT]pd.infn.it"
@ -45,10 +46,9 @@ class RequestContext(object):
self.read_deleted = read_deleted
self.remote_address = remote_address
if not timestamp:
timestamp = datetime.datetime.utcnow()
timestamp = datetime.utcnow()
if isinstance(timestamp, six.string_types):
timestamp = datetime.datetime.strptime(timestamp,
'%Y-%m-%dT%H:%M:%S.%f')
timestamp = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S.%f')
self.timestamp = timestamp
if not request_id:
request_id = generate_request_id()
@ -99,16 +99,14 @@ class RequestContext(object):
pass
def toDict(self):
date_format = "%Y-%m-%dT%H:%M:%S.%f"
return {'user_id': self.user_id,
'project_id': self.project_id,
'is_admin': self.is_admin,
'read_deleted': self.read_deleted,
'roles': self.roles,
'remote_address': self.remote_address,
'timestamp': datetime.datetime.strptime(self.timestamp,
date_format),
'timestamp': datetime.strptime(self.timestamp,
'%Y-%m-%dT%H:%M:%S.%f'),
'request_id': self.request_id,
'auth_token': self.auth_token,
'quota_class': self.quota_class,

View File

@ -1,5 +1,6 @@
import logging
import logging.handlers
import os
try:
from oslo_config import cfg
@ -53,6 +54,10 @@ def getLogger(name="unknown"):
# create a logging format
formatter = logging.Formatter(CONF.Logger.formatter)
log_dir = os.path.dirname(CONF.Logger.filename)
if not os.path.exists(log_dir):
os.makedirs(log_dir)
# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
CONF.Logger.filename,

View File

@ -1,6 +1,8 @@
from threading import Condition
from threading import Timer
from threading import Event
from threading import Thread
import time
__author__ = "Lisa Zangrando"
__email__ = "lisa.zangrando[AT]pd.infn.it"
@ -21,17 +23,18 @@ See the License for the specific language governing
permissions and limitations under the License."""
class Manager(object):
class Manager(Thread):
def __init__(self, name):
super(Manager, self).__init__()
self.setDaemon(True)
self.stop_event = Event()
self.config_opts = []
self.condition = Condition()
self.name = name
self.status = "CREATED"
self.autostart = False
self.rate = -1
self.timer = None
self.is_running = False
self.managers = {}
def execute(self, command, *args, **kargs):
@ -75,8 +78,7 @@ class Manager(object):
return self.rate
def setRate(self, rate):
if rate and rate > 0:
self.rate = rate
self.rate = rate
def setup(self):
"""Manager initialization
@ -102,46 +104,17 @@ class Manager(object):
# if self.status == "RUNNING":
# self.__task()
"""
def __task(self):
if self.rate:
if self.status == "RUNNING":
self.task()
self.timer = Timer(self.rate, self.__task)
self.timer.start()
else:
self.timer.cancel()
"""
def start(self):
if not self.rate:
return
if not self.is_running and self.rate > 0:
self.timer = Timer(self.rate * 60, self._run)
self.timer.start()
self.is_running = True
def _run(self):
self.is_running = False
self.start()
if self.status == "RUNNING":
self.task()
def stop(self):
self.timer.cancel()
self.is_running = False
if self.isAlive():
# set event to signal thread to terminate
self.stop_event.set()
# block calling thread until thread really has terminated
self.join()
def run(self):
if not self.rate:
return
with self.condition:
while self.status != "DESTROYED" and self.status != "ERROR":
if self.status == "RUNNING":
self.task()
self.condition.wait(self.rate)
else:
self.condition.wait()
while not self.stop_event.is_set():
try:
self.task()
time.sleep(self.rate * 60)
except Exception as ex:
print("task %r: %s" % (self.name, ex))

View File

@ -4,7 +4,6 @@ except ImportError:
import oslo.messaging as oslo_messaging
from synergy.common import context as ctx
from synergy.common import log as logging
from synergy.common import utils
@ -27,9 +26,6 @@ See the License for the specific language governing
permissions and limitations under the License."""
LOG = logging.getLogger(__name__)
class SynergyObject(object):
"""Base class and object factory.
@ -101,10 +97,11 @@ class SynergyObject(object):
self.attributes['synergy_object.namespace'] = 'synergy'
return self.attributes
"""
def log(self):
for key, value in self.attributes.items():
LOG.info("%s = %s" % (key, value))
"""
class SynergySerializer(oslo_messaging.Serializer):

View File

@ -5,17 +5,17 @@ import sys
from cgi import escape
from cgi import parse_qs
from pkg_resources import iter_entry_points
from synergy.common import config
from synergy.common import log as logging
from synergy.common import serializer
from synergy.common import service
from synergy.common import wsgi
try:
from oslo_config import cfg
except ImportError:
from oslo.config import cfg
from synergy.common import config
from synergy.common import log as logging
from synergy.common import serializer
from synergy.common import service
from synergy.common import wsgi
__author__ = "Lisa Zangrando"
__email__ = "lisa.zangrando[AT]pd.infn.it"
@ -35,7 +35,6 @@ either express or implied.
See the License for the specific language governing
permissions and limitations under the License."""
CONF = cfg.CONF
LOG = None
MANAGER_ENTRY_POINT = "synergy.managers" # used to discover Synergy managers
@ -162,14 +161,14 @@ class Synergy(service.Service):
CONF.register_opts(config.manager_opts, group=entry.name)
manager_conf = CONF.get(entry.name)
# manager_conf = CONF.get(entry.name)
manager_class = entry.load()
manager_obj = manager_class(*args, **kwargs)
LOG.info("manager instance %r created!", entry.name)
manager_obj.setAutoStart(manager_conf.autostart)
manager_obj.setRate(manager_conf.rate)
manager_obj.setAutoStart(CONF.get(entry.name).autostart)
manager_obj.setRate(CONF.get(entry.name).rate)
self.managers[manager_obj.getName()] = manager_obj
@ -264,7 +263,9 @@ class Synergy(service.Service):
if manager_name in self.managers:
manager = self.managers[manager_name]
try:
manager.execute(cmd=command)
cmd_result = manager.execute(command=command.getName(),
**command.getParameters())
command.addResult("result", cmd_result)
result = synergySerializer.serialize_entity(context=None,
entity=command)
# LOG.info("command result %s" % result)
@ -284,7 +285,6 @@ class Synergy(service.Service):
manager_list = None
result = {}
# synergySerializer = serializer.SynergySerializer()
query = environ.get("QUERY_STRING", None)
if query: