blob: 333566a6305574848d41dfa448850a4cbadbfc81 [file] [log] [blame]
Matteo Scandolo0a207b52018-01-29 13:39:43 -08001# Copyright 2017-present Open Networking Foundation
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15from xosconfig import Config
16from multistructlog import create_logger
17from synchronizers.new_base.modelaccessor import ProgranService
Matteo Scandoloc1102a52018-02-01 17:26:04 -080018import time
19import datetime
Matteo Scandolo0a207b52018-01-29 13:39:43 -080020
21log = create_logger(Config().get('logging'))
22
23class ProgranHelpers():
24
25 @staticmethod
26 def get_onos_info_from_si(service_instance):
27 progran_service = service_instance.owner.leaf_model
28 return ProgranHelpers.get_onos_info_from_service(progran_service)
29
30 @staticmethod
31 def get_progran_onos_info():
Matteo Scandolo6b607c82018-01-30 09:12:26 -080032 try:
33 progran_service = ProgranService.objects.all()[0]
34 except IndexError:
Matteo Scandoloc1102a52018-02-01 17:26:04 -080035 raise Exception("Cannot find Progran Service, does it exists?")
Matteo Scandolo0a207b52018-01-29 13:39:43 -080036 return ProgranHelpers.get_onos_info_from_service(progran_service)
37
38 @staticmethod
39 def get_onos_info_from_service(progran_service):
40 return {
41 'url': progran_service.onos_address,
42 'port': progran_service.onos_port,
43 'username': progran_service.onos_username,
44 'password': progran_service.onos_password,
45 }
Matteo Scandoloc1102a52018-02-01 17:26:04 -080046
47 @staticmethod
48 def get_progran_rest_errors(res):
49 res = res.json()
Matteo Scandolo830403a2018-02-05 10:51:59 -080050 if res['Result'] == -2 or res['Result'] == -1:
51 log.error('Error from ONOS Progran', error=res)
Matteo Scandoloc1102a52018-02-01 17:26:04 -080052 raise Exception(res['ErrCode'])
53
54 @staticmethod
55 def date_to_time(d):
56 if len(d) == 0:
57 return 0
58 return time.mktime(datetime.datetime.strptime(d, "%d.%m.%Y %H:%S").timetuple())
59
60 @staticmethod
61 def update_fields(model, dict, mapping={}, transformations={}):
62 dict = ProgranHelpers.convert_keys(dict, mapping, transformations)
63 for k, v in dict.iteritems():
64 if hasattr(model, k):
65 setattr(model, k, v)
Matteo Scandolo830403a2018-02-05 10:51:59 -080066 # else:
67 # log.debug("%s does not have a '%s' property, not updating it" % (model.model_name, k))
Matteo Scandoloc1102a52018-02-01 17:26:04 -080068 return model
69
70 @staticmethod
71 def convert_keys(dict, mapping={}, transformations={}):
72 for k, v in dict.iteritems():
73 if k in mapping:
74 # apply custom transformations to the data
75 if k in transformations:
76 dict[k] = transformations[k](v)
77
78 # NOTE we may have different names that the field in the dict
79 dict[mapping[k]] = dict[k]
80 del dict[k]
81 return dict
82
83 @staticmethod
84 def list_diff(first, second):
85 second = set(second)
86 return [item for item in first if item not in second]