Newer
Older
# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
#
# 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.
from sqlalchemy.dialects.postgresql import insert
from common.message_broker.MessageBroker import MessageBroker
from common.DeviceTypes import DeviceTypeEnum
from sqlalchemy_cockroachdb import run_transaction
from common.proto.context_pb2 import OpticalConfig, OpticalConfigId , Empty , EventTypeEnum
from .models.OpticalConfig.OpticalConfigModel import OpticalConfigModel
from .models.OpticalConfig.TransponderModel import TransponderTypeModel ,OpticalChannelModel
from .models.OpticalConfig.RoadmModel import RoadmTypeModel, ChannelModel , ORInterfaceModel
from context.service.database.uuids.OpticalConfig import (
channel_get_uuid , opticalconfig_get_uuid ,transponder_get_uuid,roadm_get_uuid,
interface_get_uuid
from .Events import notify_event_opticalconfig
results = session.query(OpticalConfigModel).all()
optical_config.config = json.dumps(obj.dump())
optical_config.opticalconfig_id.opticalconfig_uuid = ids_obj["opticalconfig_uuid"]
optical_config.device_id.device_uuid.uuid=ids_obj["device_uuid"]
optical_configs.append(optical_config)
return optical_configs
obj = run_transaction(sessionmaker(bind=db_engine), callback)
def set_opticalconfig(db_engine : Engine, request : OpticalConfig):
device_id = request.device_id
device_uuid = request.device_id.device_uuid.uuid
roadms=[]
channel_namespace= None
opticalconfig_uuid =opticalconfig_get_uuid(device_id)
LOGGER.info(f"cofigy_type {request.config}")
if 'channel_namespace' in config:
channel_namespace=config['channel_namespace']
if "type" in config:
config_type= config["type"]
if config_type == DeviceTypeEnum.OPTICAL_TRANSPONDER._value_:
if channel_namespace is None and 'channel_namespace' in config:
channel_namespace=config['channel_namespace']
if 'transceivers' in config and len(config['transceivers']['transceiver']) > 0:
transceivers = [transceiver for transceiver in config ['transceivers']['transceiver']]
if 'channels' in config and len(config['channels']) > 0:
#channels = [channel['name']['index'] for channel in config['channels']]
for channel_params in config['channels']:
channels.append(
{
# "opticalconfig_uuid":opticalconfig_uuid,
"transponder_uuid" : transponder_get_uuid(device_id),
"channel_uuid" : channel_get_uuid(channel_params['name']['index'],device_uuid),
"frequency" : int(channel_params["frequency"]) if "frequency" in channel_params else 0,
"operational_mode" : int(channel_params["operational-mode"]) if "operational-mode" in channel_params else 0,
"target_output_power" : channel_params["target-output-power"] if "target-output-power" in channel_params else '',
"status" : channel_params["status"] if "status" in channel_params else ""
}
)
transponder.append({
"transponder_uuid":transponder_get_uuid(device_id),
"transcievers":transceivers,
"interfaces":None,
"opticalconfig_uuid":opticalconfig_uuid,
if config_type == DeviceTypeEnum.OPTICAL_ROADM._value_:
if channel_namespace is None and 'channel_namespace' in config:
channel_namespace=config['channel_namespace']
if 'media_channels' in config and len(config['media_channels']) > 0:
#channels = [channel['name']['index'] for channel in config['channels']]
channel_num=0
for channel_params in config['media_channels']:
channel_index=channel_params['channel_index'] if channel_params['channel_index'] is not None else None
channels.append(
{
# "opticalconfig_uuid":opticalconfig_uuid,
"roadm_uuid" : roadm_get_uuid(device_id),
"channel_uuid" : channel_get_uuid(f'media_channel_{channel_index}',device_uuid),
"band_name" : channel_params['band_name'],
"lower_frequency" : int(channel_params["lower_frequency"]) if "lower_frequency" in channel_params else 0,
"upper_frequency" : int(channel_params["upper_frequency"]) if "upper_frequency" in channel_params else 0,
"dest_port" : channel_params["dest_port"] if "dest_port" in channel_params else '',
"src_port" : channel_params["src_port"] if "src_port" in channel_params else '',
"status" : channel_params["status"] if "status" in channel_params else "",
"type" : 'media_channel',
"optical_band_parent":str(channel_params['optical_band_parent']) if 'optical_band_parent' in channel_params else None,
"channel_index" : channel_index if channel_index is not None else None,
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
}
)
if 'optical_bands' in config and len(config['optical_bands']) > 0:
#channels = [channel['name']['index'] for channel in config['channels']]
channel_num=0
for channel_params in config['optical_bands']:
channel_num+=1
channels.append(
{
# "opticalconfig_uuid":opticalconfig_uuid,
"roadm_uuid" : roadm_get_uuid(device_id),
"channel_uuid" : channel_get_uuid(f'optical_bands_{channel_num}',device_uuid),
"band_name" : channel_params['band_name'],
"lower_frequency" : int(channel_params["lower_frequency"]) if "lower_frequency" in channel_params else 0,
"upper_frequency" : int(channel_params["upper_frequency"]) if "upper_frequency" in channel_params else 0,
"dest_port" : channel_params["dest_port"] if "dest_port" in channel_params else '',
"src_port" : channel_params["src_port"] if "src_port" in channel_params else '',
"status" : channel_params["status"] if "status" in channel_params else "",
"type" : 'optical_band',
"channel_index" : channel_params['channel_index'] if 'channel_index' in channel_params else None,
"optical_band_parent":None
}
)
roadms.append({
"roadm_uuid":roadm_get_uuid(device_id),
"opticalconfig_uuid":opticalconfig_uuid,
})
if config_type == DeviceTypeEnum.OPEN_ROADM._value_:
if 'interfaces' in config :
for interface in config['interfaces']:
interfaces.append({
"interface_uuid" :interface_get_uuid(interface['name']),
'name' : interface["name"],
"type" : interface["type"],
"administrative_state": interface["administrative_state"],
"circuit_pack_name" : interface["circuit_pack_name"],
"port" : interface["port"],
"interface_list" : interface["interface_list"],
"frequency" : interface["frequency"],
"width" : interface["width"],
"roadm_uuid" : roadm_get_uuid(device_id),
}
)
roadms.append({
"roadm_uuid":roadm_get_uuid(device_id),
"opticalconfig_uuid":opticalconfig_uuid,
})
"opticalconfig_uuid":opticalconfig_uuid,
# "transcievers" : transceivers,
# "interfaces" :"",
"channel_namespace" : channel_namespace ,
"endpoints" : [json.dumps(endpoint) for endpoint in config.get("endpoints",[])],
"device_uuid": device_uuid,
"type":config_type
}
LOGGER.info(f"added OpticalConfig_data {OpticalConfig_data}")
LOGGER.info(f"added channels {channels}")
stmt = insert(OpticalConfigModel).values(OpticalConfig_data)
index_elements=[OpticalConfigModel.opticalconfig_uuid],
set_=dict(
channel_namespace=stmt.excluded.channel_namespace
)
)
stmt = stmt.returning(OpticalConfigModel.opticalconfig_uuid)
opticalconfig_id = session.execute(stmt).fetchone()
if config_type == DeviceTypeEnum.OPTICAL_TRANSPONDER._value_:
if (len(transponder)>0):
stmt = insert(TransponderTypeModel).values(transponder)
stmt = stmt.on_conflict_do_update(
index_elements=[TransponderTypeModel.transponder_uuid],
set_=dict(
transcievers= stmt.excluded.transcievers ,
)
stmt = stmt.returning(TransponderTypeModel.transponder_uuid)
transponder_id = session.execute(stmt).fetchone()
if (len(channels)>0) :
stmt = insert(OpticalChannelModel).values(channels)
stmt = stmt.on_conflict_do_update(
index_elements=[OpticalChannelModel.channel_uuid ],
set_=dict(
channel_name= stmt.excluded.channel_name ,
frequency = stmt.excluded.frequency,
operational_mode=stmt.excluded.operational_mode,
target_output_power=stmt.excluded.target_output_power,
)
)
stmt = stmt.returning(OpticalChannelModel.channel_uuid)
opticalChannel_id = session.execute(stmt).fetchone()
if config_type == DeviceTypeEnum.OPTICAL_ROADM._value_:
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
if (len(roadms)>0):
stmt = insert(RoadmTypeModel).values(roadms)
stmt = stmt.on_conflict_do_update(
index_elements=[RoadmTypeModel.roadm_uuid],
set_=dict(
circuits=stmt.excluded.circuits
)
)
stmt = stmt.returning(RoadmTypeModel.roadm_uuid)
roadm_id = session.execute(stmt).fetchone()
if (channels is not None and len(channels)>0) :
stmt = insert(ChannelModel).values(channels)
stmt = stmt.on_conflict_do_update(
index_elements=[ChannelModel.channel_uuid ],
set_=dict(
band_name= stmt.excluded.band_name ,
lower_frequency = stmt.excluded.lower_frequency,
upper_frequency = stmt.excluded.upper_frequency,
type=stmt.excluded.type,
status=stmt.excluded.status,
dest_port=stmt.excluded.dest_port,
src_port=stmt.excluded.src_port,
channel_index=stmt.excluded.channel_index,
optical_band_parent = stmt.excluded.optical_band_parent
)
)
stmt = stmt.returning(ChannelModel.channel_uuid)
opticalChannel_id = session.execute(stmt).fetchone()
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
if config_type == DeviceTypeEnum.OPEN_ROADM._value_:
if (len(roadms)>0):
stmt = insert(RoadmTypeModel).values(roadms)
stmt = stmt.on_conflict_do_update(
index_elements=[RoadmTypeModel.roadm_uuid],
set_=dict(
interfaces=stmt.excluded.interfaces
)
)
stmt = stmt.returning(RoadmTypeModel.roadm_uuid)
roadm_id = session.execute(stmt).fetchone()
if len(interface) >0 :
stmt = insert(ORInterfaceModel).values(interface)
stmt = stmt.on_conflict_do_update(
index_elements=[ORInterfaceModel.interface_uuid ],
set_=dict(
name= stmt.excluded.name ,
frequency = stmt.excluded.frequency,
administrative_state = stmt.excluded.administrative_state,
type=stmt.excluded.type,
circuit_pack_name=stmt.excluded.circuit_pack_name,
port=stmt.excluded.port,
interface_list=stmt.excluded.interface_list,
width=stmt.excluded.width,
)
)
stmt = stmt.returning(ORInterfaceModel.interface_uuid)
opticalChannel_id = session.execute(stmt).fetchone()
opticalconfig_id = run_transaction(sessionmaker(bind=db_engine), callback)
return {'opticalconfig_uuid': opticalconfig_id}
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
def update_opticalconfig(db_engine : Engine, request : OpticalConfig):
opticalconfig_id = OpticalConfigId()
device_id = request.device_id
device_uuid = request.device_id.device_uuid.uuid
channels = []
transponder=[]
roadms=[]
channel_namespace= None
OpticalConfig_data = []
config_type=None
is_transpondre=False
opticalconfig_uuid =opticalconfig_get_uuid(device_id)
LOGGER.info(f"udpate_cofigy_type {request.config}")
if request.config :
config = json.loads(request.config)
if 'new_config' in config:
if 'type' in config:
config_type=config['type']
if "type" in config['new_config'] and config_type is None:
config_type= config['new_config']["type"]
if 'channel_namespace' in config['new_config']:
channel_namespace=config['new_config'] ['channel_namespace']
if config_type == DeviceTypeEnum.OPTICAL_TRANSPONDER._value_:
is_transpondre=True
transceivers = []
if channel_namespace is None and 'channel_namespace' in config:
channel_namespace=config['channel_namespace']
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
if 'transceivers' in config['new_config'] and len(config['new_config']['transceivers']['transceiver']) > 0:
transceivers = [transceiver for transceiver in config['new_config'] ['transceivers']['transceiver']]
if 'channels' in config['new_config'] and len(config['new_config']['channels']) > 0:
#channels = [channel['name']['index'] for channel in config['channels']]
for channel_params in config['new_config']['channels']:
channels.append(
{
# "opticalconfig_uuid":opticalconfig_uuid,
"transponder_uuid" : transponder_get_uuid(device_id),
"channel_uuid" : channel_get_uuid(channel_params['name']['index'],device_uuid),
"channel_name" : channel_params['name']['index'],
"frequency" : int(channel_params["frequency"]) if "frequency" in channel_params else 0,
"operational_mode" : int(channel_params["operational-mode"]) if "operational-mode" in channel_params else 0,
"target_output_power" : channel_params["target-output-power"] if "target-output-power" in channel_params else '',
"status" : channel_params["status"] if "status" in channel_params else ""
}
)
elif 'flow_handled' in config and 'new_config' in config :
target_config = config['new_config']
dest_pair=None
src=None
dst=None
src_pair=config['flow_handled'][0]
src,dst=src_pair
if src_pair is None and len(config['flow_handled'])>1 :
dest_pair=config['flow_handled'][1]
src,dst=dest_pair
channel_index=src if src is not None and src !='0' else dst
channel_name=f"channel-{channel_index}"
channels.append(
{
# "opticalconfig_uuid":opticalconfig_uuid,
"transponder_uuid" : transponder_get_uuid(device_id),
"channel_uuid" : channel_get_uuid(channel_name,device_uuid),
"channel_name" :channel_name,
"frequency" : int(target_config["frequency"]) if "frequency" in target_config else 0,
"operational_mode" : int(target_config["operational-mode"]) if "operational-mode" in target_config else 0,
"target_output_power" : target_config["target-output-power"] if "target-output-power" in target_config else '',
"status" : target_config["status"] if "status" in target_config else ""
}
)
transponder.append({
"transponder_uuid":transponder_get_uuid(device_id),
"transcievers":transceivers,
"interfaces":None,
"opticalconfig_uuid":opticalconfig_uuid,
})
if config_type == DeviceTypeEnum.OPTICAL_ROADM._value_:
if channel_namespace is None and 'channel_namespace' in config['new_config']:
channel_namespace=config['new_config']['channel_namespace']
if 'is_opticalband' in config and not config['is_opticalband']:
#channels = [channel['name']['index'] for channel in config['channels']]
if 'flow_handled' in config and len(config['flow_handled'])>0 :
num=0
flow_id=config["new_config"]["flow_id"] if 'flow_id' in config['new_config'] else None
for flow in config['flow_handled']:
src_port,dest_port=flow
channel_index=flow_id+num
num+=1
channels.append(
{
# "opticalconfig_uuid":opticalconfig_uuid,
"roadm_uuid" : roadm_get_uuid(device_id),
"channel_uuid" : channel_get_uuid(f'media_channel_{channel_index}',device_uuid),
"band_name" : config['new_config']['band_type'],
"lower_frequency" : int(int(config['new_config']['frequency']) - (int(config['new_config']['band'])/2)) if "frequency" in config['new_config'] else 0,
"upper_frequency" :int(int(config['new_config']['frequency']) + (int(config['new_config']['band'])/2)) if "frequency" in config['new_config'] else 0,
"dest_port" :dest_port,
"src_port" : src_port,
"status" : config['new_config']["status"] if "status" in config['new_config'] else "",
"type" : 'media_channel',
"optical_band_parent":str( config['new_config']['ob_id']) if 'ob_id' in config['new_config'] else None,
"channel_index":str(channel_index) if channel_index is not None else None
}
)
if 'is_opticalband' in config and config['is_opticalband']:
#channels = [channel['name']['index'] for channel in config['channels']]
if 'flow_handled' in config and len(config['flow_handled'])>0 :
ob_id =config['new_config']['ob_id'] if 'ob_id' in config['new_config'] else None
num=0
for flow in config['flow_handled']:
src_port,dest_port=flow
channel_index=ob_id+num
num+=1
channels.append(
{
# "opticalconfig_uuid":opticalconfig_uuid,
"roadm_uuid" : roadm_get_uuid(device_id),
"channel_uuid" : channel_get_uuid(f'optical_bands_{channel_index}',device_uuid),
"band_name" : config['new_config']['band_type'],
"lower_frequency" : int(config['new_config']["low-freq"]) if "low-freq" in config['new_config'] else 0,
"upper_frequency" : int(config['new_config']["up-freq"]) if "up-freq" in config['new_config'] else 0,
"dest_port" :dest_port,
"src_port" : src_port,
"status" : config['new_config']["status"] if "status" in config['new_config'] else "",
"type" : 'optical_band',
"channel_index" :str( channel_index) if channel_index is not None else None
}
)
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
roadms.append({
"roadm_uuid":roadm_get_uuid(device_id),
"opticalconfig_uuid":opticalconfig_uuid,
})
OpticalConfig_data.append(
{
"opticalconfig_uuid":opticalconfig_uuid,
# "transcievers" : transceivers,
# "interfaces" :"",
"channel_namespace" : channel_namespace ,
"endpoints" : [json.dumps(endpoint) for endpoint in config['new_config'].get("endpoints",[])],
"device_uuid": device_uuid,
"type":config_type
}
)
LOGGER.info(f"udpate_ OpticalConfig_data {OpticalConfig_data}")
LOGGER.info(f"udpate_ channels {channels}")
def callback(session:Session)->bool:
stmt = insert(OpticalConfigModel).values(OpticalConfig_data)
stmt = stmt.on_conflict_do_update(
index_elements=[OpticalConfigModel.opticalconfig_uuid],
set_=dict(
channel_namespace=stmt.excluded.channel_namespace
)
)
stmt = stmt.returning(OpticalConfigModel.opticalconfig_uuid)
opticalconfig_id = session.execute(stmt).fetchone()
if config_type == DeviceTypeEnum.OPTICAL_TRANSPONDER._value_:
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
if (len(transponder)>0):
stmt = insert(TransponderTypeModel).values(transponder)
stmt = stmt.on_conflict_do_update(
index_elements=[TransponderTypeModel.transponder_uuid],
set_=dict(
transcievers= stmt.excluded.transcievers ,
)
)
stmt = stmt.returning(TransponderTypeModel.transponder_uuid)
transponder_id = session.execute(stmt).fetchone()
if (len(channels)>0) :
stmt = insert(OpticalChannelModel).values(channels)
stmt = stmt.on_conflict_do_update(
index_elements=[OpticalChannelModel.channel_uuid ],
set_=dict(
channel_name= stmt.excluded.channel_name ,
frequency = stmt.excluded.frequency,
operational_mode=stmt.excluded.operational_mode,
target_output_power=stmt.excluded.target_output_power,
status = stmt.excluded.status,
)
)
stmt = stmt.returning(OpticalChannelModel.channel_uuid)
opticalChannel_id = session.execute(stmt).fetchone()
if config_type == DeviceTypeEnum.OPTICAL_ROADM._value_:
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
if (len(roadms)>0):
stmt = insert(RoadmTypeModel).values(roadms)
stmt = stmt.on_conflict_do_update(
index_elements=[RoadmTypeModel.roadm_uuid],
set_=dict(
circuits=stmt.excluded.circuits
)
)
stmt = stmt.returning(RoadmTypeModel.roadm_uuid)
roadm_id = session.execute(stmt).fetchone()
if (channels is not None and len(channels)>0) :
stmt = insert(ChannelModel).values(channels)
stmt = stmt.on_conflict_do_update(
index_elements=[ChannelModel.channel_uuid ],
set_=dict(
band_name= stmt.excluded.band_name ,
lower_frequency = stmt.excluded.lower_frequency,
upper_frequency = stmt.excluded.upper_frequency,
type=stmt.excluded.type,
status=stmt.excluded.status,
dest_port=stmt.excluded.dest_port,
src_port=stmt.excluded.src_port,
)
)
stmt = stmt.returning(ChannelModel.channel_uuid)
opticalChannel_id = session.execute(stmt).fetchone()
opticalconfig_id = run_transaction(sessionmaker(bind=db_engine), callback)
return {'opticalconfig_uuid': opticalconfig_id}
def select_opticalconfig(db_engine:Engine,request:OpticalConfigId):
def callback(session : Session) -> OpticalConfig:
result = OpticalConfig()
stmt = session.query(OpticalConfigModel)
stmt = stmt.filter_by(opticalconfig_uuid=request.opticalconfig_uuid)
obj = stmt.first()
if obj is not None:
result.config = json.dumps(obj.dump())
ids_obj = obj.dump_id()
result.opticalconfig_id.opticalconfig_uuid = ids_obj["opticalconfig_uuid"]
result.device_id.device_uuid.uuid=ids_obj["device_uuid"]
LOGGER.info(f"select_opticalconfig {result}")
return run_transaction(sessionmaker(bind=db_engine, expire_on_commit=False), callback)
def delete_opticalconfig(db_engine : Engine ,messagebroker : MessageBroker, request : OpticalConfigId):
opticalconfig_uuid = request.opticalconfig_uuid
def callback(session : Session):
query = session.query(OpticalConfigModel)
num_deleted = session.query(OpticalConfigModel).filter_by(opticalconfig_uuid=opticalconfig_uuid).delete()
return num_deleted > 0
deleted = run_transaction(sessionmaker(bind=db_engine), callback)
if deleted:
notify_event_opticalconfig(messagebroker, EventTypeEnum.EVENTTYPE_REMOVE, opticalconfig_uuid)
return Empty()
def delete_opticalchannel(db_engine : Engine ,messagebroker : MessageBroker, request : OpticalConfig):
config = json.loads(request.config)
device_id = request.device_id
device_uuid = request.device_id.device_uuid.uuid
opticalconfig_uuid = request.opticalconfig_id.opticalconfig_uuid
channels=[]
config_type=None
LOGGER.info(f"delete_optical_channel config {config}")
if "type" in config :
config_type= config["type"]
if 'new_config' in config:
if config_type == DeviceTypeEnum.OPTICAL_TRANSPONDER._value_:
for flow in config['flow']:
src,dest = flow
channel_index= src if src is not None and src!='0' else dest
channel_name= f"channel-{channel_index}"
channels.append(
{
# "opticalconfig_uuid":opticalconfig_uuid,
"transponder_uuid" : transponder_get_uuid(device_id),
"channel_uuid" : channel_get_uuid(channel_name ,device_uuid),
"channel_name" :channel_name ,
"frequency" : 0,
"operational_mode" : None,
"target_output_power" : None,
"status" :"DISABLED"
}
)
elif config_type == DeviceTypeEnum.OPTICAL_ROADM._value_:
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
if 'flow' in config :
if 'is_opticalband' in config:
if config['is_opticalband']:
ob_id =config['new_config']['ob_id'] if 'ob_id' in config['new_config'] else None
if len(config['flow']) ==0:
channel_index=ob_id+channel_num
channel_name=f'optical_bands_{channel_index}'
channels.append( channel_get_uuid(channel_name,device_uuid))
else :
for flow in config['flow']:
channel_index=ob_id+channel_num
channel_num +=1
channel_name=f'optical_bands_{channel_index}'
channels.append( channel_get_uuid(channel_name,device_uuid))
else :
if config['flow'] ==0:
channel_num=1
channel_name=f'media_channel_{channel_num}'
channels.append( channel_get_uuid(channel_name,device_uuid))
else :
for flow in config['flow']:
channel_num +=1
channel_name=f'media_channel_{channel_num}'
channels.append( channel_get_uuid(channel_name,device_uuid))
else :
return
LOGGER.info(f"delete channel {channels}")
def callback(session : Session):
all_suceed=[]
if config_type ==DeviceTypeEnum.OPTICAL_ROADM._value_:
query = session.query(ChannelModel)
for channel_uuid in channels:
num_deleted = session.query(ChannelModel).filter_by(channel_uuid=channel_uuid).delete()
all_suceed.append(num_deleted > 0)
return all_suceed
elif config_type == DeviceTypeEnum.OPTICAL_TRANSPONDER._value_ :
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
if (len(channels)>0) :
stmt = insert(OpticalChannelModel).values(channels)
stmt = stmt.on_conflict_do_update(
index_elements=[OpticalChannelModel.channel_uuid ],
set_=dict(
channel_name= stmt.excluded.channel_name ,
frequency = stmt.excluded.frequency,
operational_mode=stmt.excluded.operational_mode,
target_output_power=stmt.excluded.target_output_power,
status=stmt.excluded.status
)
)
stmt = stmt.returning(OpticalChannelModel.channel_uuid)
opticalChannel_id = session.execute(stmt).fetchone()
all_suceed.append(True)
return all_suceed
else:
return all_suceed
all_deleted = run_transaction(sessionmaker(bind=db_engine), callback)
for stat in all_deleted:
if not stat:
return
notify_event_opticalconfig(messagebroker, EventTypeEnum.EVENTTYPE_REMOVE, opticalconfig_uuid)