[CORD-2550] Fixing profile/enodeb update and adding debug info
[CORD-2714] Not adding profiles to the same handover
Change-Id: I7f84362c8de43753f9712f53fbf1bead3ece58f3
diff --git a/xos/synchronizer/steps/sync_progranserviceinstance.py b/xos/synchronizer/steps/sync_progranserviceinstance.py
index 11d679d..69a860e 100644
--- a/xos/synchronizer/steps/sync_progranserviceinstance.py
+++ b/xos/synchronizer/steps/sync_progranserviceinstance.py
@@ -16,7 +16,7 @@
import os
import sys
-from synchronizers.new_base.SyncInstanceUsingAnsible import SyncStep
+from synchronizers.new_base.syncstep import SyncStep
from synchronizers.new_base.modelaccessor import ProgranServiceInstance, ENodeB, Handover
from xosconfig import Config
@@ -40,9 +40,6 @@
observes = ProgranServiceInstance
- # Poll every 5 loops of self.call
- poll = 0
-
def sync_record(self, o):
onos = ProgranHelpers.get_progran_onos_info()
@@ -50,13 +47,19 @@
profile_url = "http://%s:%s/onos/progran/profile/" % (onos['url'], onos['port'])
data = self.get_progran_profile_field(o)
+ log.debug("Sync'ing profile with data", request_data=data)
- r = requests.post(profile_url, data=json.dumps(data), auth=HTTPBasicAuth(onos['username'], onos['password']))
+ if o.previously_sync == False:
+ log.debug("Sending POST")
+ r = requests.post(profile_url, data=json.dumps(data), auth=HTTPBasicAuth(onos['username'], onos['password']))
+ else:
+ log.debug("Sending PUT")
+ r = requests.put(profile_url, data=json.dumps(data),
+ auth=HTTPBasicAuth(onos['username'], onos['password']))
ProgranHelpers.get_progran_rest_errors(r)
log.info("Profile synchronized", response=r.json())
- log.info("sync'ing enodeb", object=str(o), **o.tologdict())
if o.enodeb_id:
log.info("adding profile %s to enodeb %s" % (o.id, o.enodeb.enbId), object=str(o), **o.tologdict())
enodeb_url = "http://%s:%s/onos/progran/enodeb/%s/profile" % (onos['url'], onos['port'], o.enodeb.enbId)
@@ -65,6 +68,7 @@
o.name
]
}
+ log.debug("Adding enodeb to profile with data", request_data=data)
r = requests.post(enodeb_url, data=json.dumps(data), auth=HTTPBasicAuth(onos['username'], onos['password']))
ProgranHelpers.get_progran_rest_errors(r)
o.active_enodeb_id = o.enodeb_id # storing the value to know when it will be deleted
@@ -78,7 +82,7 @@
o.active_enodeb_id = 0 # removing the value because it has been deleted
log.info("EnodeB synchronized", response=r.json())
- o.save()
+ o.previously_sync = True
def get_handover_for_profile(self, o):
return {
@@ -124,103 +128,4 @@
log.info("Profile synchronized", response=r.json())
def fetch_pending(self, deleted):
- # self.read_profiles_from_progran()
return super(SyncProgranServiceInstance, self).fetch_pending(deleted)
-
- @staticmethod
- def date_to_time(d):
- if len(d) == 0:
- return 0
- return time.mktime(datetime.datetime.strptime(d, "%d.%m.%Y %H:%S").timetuple())
-
- @staticmethod
- def update_fields(model, dict, mapping={}, transformations={}):
- dict = SyncProgranServiceInstance.convert_keys(dict, mapping, transformations)
- for k, v in dict.iteritems():
- if hasattr(model, k):
- setattr(model, k, v)
- else:
- log.warn("%s does not have a '%s' property, not updating it" % (model.model_name, k))
- return model
-
- @staticmethod
- def convert_keys(dict, mapping={}, transformations={}):
- for k, v in dict.iteritems():
- if k in mapping:
- # apply custom transformations to the data
- if k in transformations:
- dict[k] = transformations[k](v)
-
- # NOTE we may have different names that the field in the dict
- dict[mapping[k]] = dict[k]
- del dict[k]
- return dict
-
-
- def my_call(self, failed=[], deletion=False):
- """
- Read profile from progran and save them in xos
- """
- if self.poll < 5:
- self.poll = self.poll + 1
- else:
- self.poll = 0
- onos = ProgranHelpers.get_progran_onos_info()
- profile_url = "http://%s:%s/onos/progran/profile/" % (onos['url'], onos['port'])
- r = requests.get(profile_url, auth=HTTPBasicAuth(onos['username'], onos['password']))
- res = r.json()['ProfileArray']
-
- # remove default profiles
- res = [p for p in res if "Default" not in p['Name']]
-
- field_mapping = {
- 'Name': 'name',
- 'Start': 'start',
- 'End': 'end'
- }
-
- field_transformations = {
- 'Start': SyncProgranServiceInstance.date_to_time,
- 'End': SyncProgranServiceInstance.date_to_time
- }
-
- handover_mapping = {
- 'A5Hysteresis': 'HysteresisA5',
- 'A3Hysteresis': 'HysteresisA3'
- }
-
- for p in res:
-
- # checking for handovers
- handover_dict = p['Handover']
- handover_dict = SyncProgranServiceInstance.convert_keys(handover_dict, handover_mapping)
- del p['Handover']
-
- try:
- handover = Handover.objects.get(**handover_dict)
- log.info("handover already exists, updating it", handover=handover_dict)
- except IndexError:
- handover = Handover()
- handover = SyncProgranServiceInstance.update_fields(handover, handover_dict)
- log.info("handover is new, creating it", handover=handover_dict)
-
- handover.save()
-
- # checking for profiles
- try:
- si = ProgranServiceInstance.objects.get(name=p['Name'])
- log.info("Profile %s already exists, updating it" % p['Name'])
- except IndexError:
- si = ProgranServiceInstance()
- si.name = p['Name']
- log.info("Profile %s is new, creating it" % p['Name'])
-
- si = SyncProgranServiceInstance.update_fields(si, p, field_mapping, field_transformations)
- si.handover = handover
-
-
-
- # TODO keep track of the deleted profiles
- # existing profiles - updated profiles = deleted profiles
-
- si.save()