def send_message(cls, data: Dict[str, Any], change_id: bson.ObjectId) -> None: """ Send MX message :param data: :param change_id: :return: """ data["$changeid"] = str(change_id) # Build headers headers = { MX_CHANGE_ID: smart_bytes(change_id), } additional_headers = cls.get_msg_headers(data) if additional_headers: headers.update(additional_headers) # Schedule to send send_message( data, message_type=cls.name, headers=headers, sharding_key=hash_int(data["id"]) & 0xFFFFFFFF, ) # Cleanup del data["$changeid"]
def event_hash(event: ActiveEvent) -> int: e_vars = { v.name: event.vars.get(v.name, "") or "" for v in event.event_class.vars if v.match_suppress } var_hash = dict_hash_int(event.vars) if e_vars else 0 return hash_int( f"{event.managed_object.id}:{event.event_class.id}:{var_hash}")
def send_reboot_message(self, ts: datetime.datetime) -> None: mo = self.object data = { "ts": ts.isoformat(), "managed_object": { "id": str(mo.id), "name": mo.name, "bi_id": str(mo.bi_id), "address": mo.address, "pool": mo.pool.name, "profile": mo.profile.name, "object_profile": { "id": str(mo.object_profile.id), "name": mo.object_profile.name, }, "administrative_domain": { "id": str(mo.administrative_domain.id), "name": str(mo.administrative_domain.name), }, "segment": { "id": str(mo.segment.id), "name": str(mo.segment.name), }, "x": mo.x, "y": mo.y, }, } if mo.vendor: data["managed_object"]["vendor"] = mo.vendor.name if mo.platform: data["managed_object"]["platform"] = mo.platform.name if mo.version: data["managed_object"]["version"] = mo.version.version if mo.container: data["managed_object"]["container"] = { "id": str(mo.container.id), "name": mo.container.name, } if mo.remote_system and mo.remote_id: data["managed_object"]["remote_system"] = { "id": str(mo.remote_system.id), "name": mo.remote_system.name, } data["managed_object"]["remote_id"] = str(mo.remote_id) send_message( data, message_type="reboot", headers={ MX_PROFILE_ID: smart_bytes(mo.object_profile.id), }, sharding_key=hash_int(mo.id) & 0xFFFFFFFF, )
def event_hash(event: ActiveEvent) -> int: var_hash = dict_hash_int(event.vars) if event.vars else 0 return hash_int( f"{event.managed_object.id}:{event.event_class.id}:{var_hash}")
def test_hash_int(value, expected): assert hash_int(value) == expected