+# -*- coding: utf-8 -*-
+
+# Copyright 2018 Whitestack, LLC
+# *************************************************************
+
+# This file is part of OSM Monitoring module
+# All Rights Reserved to Whitestack, LLC
+
+# 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.
+
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: bdiaz@whitestack.com or glavado@whitestack.com
+##
import json
import logging
+import yaml
from kafka import KafkaConsumer
from osm_policy_module.core.config import Config
# Initialize Kafka consumer
log.info("Connecting to Kafka server at %s", kafka_server)
+ # TODO: Add logic to handle deduplication of messages when using group_id.
+ # See: https://stackoverflow.com/a/29836412
consumer = KafkaConsumer(bootstrap_servers=kafka_server,
key_deserializer=bytes.decode,
- value_deserializer=bytes.decode,
- group_id="policy-module-agent")
+ value_deserializer=bytes.decode)
consumer.subscribe(['lcm_pm', 'alarm_response'])
for message in consumer:
log.info("Message arrived: %s", message)
- log.info("Message key: %s", message.key)
try:
if message.key == 'configure_scaling':
- content = json.loads(message.value)
+ try:
+ content = json.loads(message.value)
+ except:
+ content = yaml.safe_load(message.value)
log.info("Creating scaling record in DB")
# TODO: Use transactions: http://docs.peewee-orm.com/en/latest/peewee/transactions.html
scaling_record = ScalingRecord.create(
alarm = ScalingAlarm.select().where(ScalingAlarm.alarm_id == alarm_id).get()
if alarm:
lcm_client = LcmClient()
- log.info("Sending scaling action message: %s", json.dumps(alarm))
+ log.info("Sending scaling action message for ns: %s", alarm_id)
lcm_client.scale(alarm.scaling_record.nsr_id, alarm.scaling_record.name, alarm.action)
except Exception:
log.exception("Error consuming message: ")