diff --git a/CMakeLists.txt b/CMakeLists.txt index 187fbba..d4c9b9f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,7 +135,7 @@ add_executable(owprov src/storage/storage_variables.cpp src/storage/storage_variables.h src/RESTAPI/RESTAPI_variables_handler.cpp src/RESTAPI/RESTAPI_variables_handler.h src/RESTAPI/RESTAPI_variables_list_handler.cpp src/RESTAPI/RESTAPI_variables_list_handler.h - src/FileDownloader.cpp src/FileDownloader.h src/Tasks/VenueConfigUpdater.h src/Kafka_ProvUpdater.cpp src/Kafka_ProvUpdater.h src/storage/storage_operataor.cpp src/storage/storage_operataor.h src/storage/storage_sub_devices.cpp src/storage/storage_sub_devices.h src/storage/storage_service_class.cpp src/storage/storage_service_class.h src/RESTAPI/RESTAPI_sub_devices_list_handler.cpp src/RESTAPI/RESTAPI_sub_devices_list_handler.h src/RESTAPI/RESTAPI_sub_devices_handler.cpp src/RESTAPI/RESTAPI_sub_devices_handler.h src/RESTAPI/RESTAPI_service_class_list_handler.cpp src/RESTAPI/RESTAPI_service_class_list_handler.h src/RESTAPI/RESTAPI_service_class_handler.cpp src/RESTAPI/RESTAPI_service_class_handler.h src/RESTAPI/RESTAPI_operators_list_handler.cpp src/RESTAPI/RESTAPI_operators_list_handler.h src/RESTAPI/RESTAPI_operators_handler.cpp src/RESTAPI/RESTAPI_operators_handler.h src/storage/storage_op_contacts.cpp src/storage/storage_op_contacts.h src/storage/storage_op_locations.cpp src/storage/storage_op_locations.h src/RESTAPI/RESTAPI_op_contact_list_handler.cpp src/RESTAPI/RESTAPI_op_contact_list_handler.h src/RESTAPI/RESTAPI_op_contact_handler.cpp src/RESTAPI/RESTAPI_op_contact_handler.h src/RESTAPI/RESTAPI_op_location_list_handler.cpp src/RESTAPI/RESTAPI_op_location_list_handler.h src/RESTAPI/RESTAPI_op_location_handler.cpp src/RESTAPI/RESTAPI_op_location_handler.h src/ProvWebSocketClient.cpp src/ProvWebSocketClient.h src/Tasks/VenueRebooter.h) + src/FileDownloader.cpp src/FileDownloader.h src/Tasks/VenueConfigUpdater.h src/Kafka_ProvUpdater.cpp src/Kafka_ProvUpdater.h src/storage/storage_operataor.cpp src/storage/storage_operataor.h src/storage/storage_sub_devices.cpp src/storage/storage_sub_devices.h src/storage/storage_service_class.cpp src/storage/storage_service_class.h src/RESTAPI/RESTAPI_sub_devices_list_handler.cpp src/RESTAPI/RESTAPI_sub_devices_list_handler.h src/RESTAPI/RESTAPI_sub_devices_handler.cpp src/RESTAPI/RESTAPI_sub_devices_handler.h src/RESTAPI/RESTAPI_service_class_list_handler.cpp src/RESTAPI/RESTAPI_service_class_list_handler.h src/RESTAPI/RESTAPI_service_class_handler.cpp src/RESTAPI/RESTAPI_service_class_handler.h src/RESTAPI/RESTAPI_operators_list_handler.cpp src/RESTAPI/RESTAPI_operators_list_handler.h src/RESTAPI/RESTAPI_operators_handler.cpp src/RESTAPI/RESTAPI_operators_handler.h src/storage/storage_op_contacts.cpp src/storage/storage_op_contacts.h src/storage/storage_op_locations.cpp src/storage/storage_op_locations.h src/RESTAPI/RESTAPI_op_contact_list_handler.cpp src/RESTAPI/RESTAPI_op_contact_list_handler.h src/RESTAPI/RESTAPI_op_contact_handler.cpp src/RESTAPI/RESTAPI_op_contact_handler.h src/RESTAPI/RESTAPI_op_location_list_handler.cpp src/RESTAPI/RESTAPI_op_location_list_handler.h src/RESTAPI/RESTAPI_op_location_handler.cpp src/RESTAPI/RESTAPI_op_location_handler.h src/ProvWebSocketClient.cpp src/ProvWebSocketClient.h src/Tasks/VenueRebooter.h src/Tasks/VenueUpgrade.h src/sdks/SDK_fms.cpp src/sdks/SDK_fms.h) target_link_libraries(owprov PUBLIC ${Poco_LIBRARIES} diff --git a/build b/build index 8d9f781..3fdc173 100644 --- a/build +++ b/build @@ -1 +1 @@ -118 \ No newline at end of file +122 \ No newline at end of file diff --git a/openapi/owprov.yaml b/openapi/owprov.yaml index 9aa8bf3..593ec2d 100644 --- a/openapi/owprov.yaml +++ b/openapi/owprov.yaml @@ -181,6 +181,28 @@ components: items: $ref: '#/components/schemas/ManagementPolicy' + DeviceRules: + type: object + properties: + rcOnly: + type: string + enum: + - yes + - no + - inherit + rrm: + type: string + enum: + - yes + - no + - inherit + firmwareUpgrade: + type: string + enum: + - yes + - no + - inherit + # uuids: ent: Entity: type: object @@ -255,12 +277,8 @@ components: items: type: string format: uuid - rrm: - type: string - enum: - - off - - on - - inherit + deviceRules: + $ref: '#/components/schemas/DeviceRules' sourceIP: $ref: '#/components/schemas/StringList' defaultEntity: @@ -336,12 +354,8 @@ components: location: type: string format: uuid - rrm: - type: string - enum: - - off - - on - - inherit + deviceRules: + $ref: '#/components/schemas/DeviceRules' sourceIP: $ref: '#/components/schemas/StringList' managementPolicies: @@ -790,17 +804,8 @@ components: subscriberOnly: type: boolean default: false - rrm: - type: string - enum: - - off - - on - - inherit - firmwareUpgrade: - type: string - example: auto or a time string of the format DOW-HH:MM - firmwareRCOnly: - type: boolean + deviceRules: + $ref: '#/components/schemas/DeviceRules' venue: type: string format: uuid @@ -850,12 +855,8 @@ components: deviceConfiguration: type: string format: uuid - rrm: - type: string - enum: - - off - - on - - inherit + deviceRules: + $ref: '#/components/schemas/DeviceRules' managementPolicy: type: string format: uuid @@ -1198,17 +1199,8 @@ components: defaultOperator: type: boolean default: false - rrm: - type: string - enum: - - off - - on - - inherit - firmwareUpgrade: - type: string - example: auto or a time string of the format DOW-HH:MM - firmwareRCOnly: - type: boolean + deviceRules: + $ref: '#/components/schemas/DeviceRules' managementPolicy: type: string format: uuid @@ -1254,12 +1246,8 @@ components: $ref: '#/components/schemas/SubLocation' contact: $ref: '#/components/schemas/SubContact' - rrm: - type: string - enum: - - off - - on - - inherit + deviceRules: + $ref: '#/components/schemas/DeviceRules' state: type: string locale: diff --git a/src/RESTAPI/RESTAPI_configurations_handler.cpp b/src/RESTAPI/RESTAPI_configurations_handler.cpp index 5962a26..2c5499f 100644 --- a/src/RESTAPI/RESTAPI_configurations_handler.cpp +++ b/src/RESTAPI/RESTAPI_configurations_handler.cpp @@ -202,9 +202,8 @@ namespace OpenWifi{ Existing.variables = ToVariables; } - AssignIfPresent(RawObject, "rrm", Existing.rrm); - AssignIfPresent(RawObject, "firmwareUpgrade",Existing.firmwareUpgrade); - AssignIfPresent(RawObject, "firmwareRCOnly", Existing.firmwareRCOnly); + if(RawObject->has("deviceRules")) + Existing.deviceRules = NewConfig.deviceRules; if(DB_.UpdateRecord("id",UUID,Existing)) { ManageMembership(StorageService()->VariablesDB(),&ProvObjects::VariableBlock::configurations, FromVariables, ToVariables, Existing.info.id); diff --git a/src/RESTAPI/RESTAPI_db_helpers.h b/src/RESTAPI/RESTAPI_db_helpers.h index f9ef95c..30e33e9 100644 --- a/src/RESTAPI/RESTAPI_db_helpers.h +++ b/src/RESTAPI/RESTAPI_db_helpers.h @@ -525,12 +525,14 @@ namespace OpenWifi { return Result; } - inline bool ValidRRM(const std::string &V) { - return (V=="on" || V=="off" || V=="inherit"); + inline bool ValidDeviceRules(const ProvObjects::DeviceRules & DR) { + return (DR.rrm=="on" || DR.rrm=="off" || DR.rrm=="inherit") && + (DR.firmwareUpgrade=="on" || DR.firmwareUpgrade=="off" || DR.firmwareUpgrade=="inherit") && + (DR.rcOnly=="on" || DR.rcOnly=="off" || DR.rcOnly=="inherit"); } - inline bool ValidRRM(const std::string &V, RESTAPIHandler &H) { - if(V=="on" || V=="off" || V=="inherit") + inline bool ValidDeviceRules(const ProvObjects::DeviceRules & DR, RESTAPIHandler &H) { + if(ValidDeviceRules(DR)) return true; H.BadRequest(RESTAPI::Errors::InvalidRRM); return false; diff --git a/src/RESTAPI/RESTAPI_entity_handler.cpp b/src/RESTAPI/RESTAPI_entity_handler.cpp index e969ce1..caf2f12 100644 --- a/src/RESTAPI/RESTAPI_entity_handler.cpp +++ b/src/RESTAPI/RESTAPI_entity_handler.cpp @@ -150,7 +150,8 @@ namespace OpenWifi{ return BadRequest(Error); } - AssignIfPresent(RawObject, "rrm", Existing.rrm); + if(RawObject->has("deviceRules")) + Existing.deviceRules = NewEntity.deviceRules; if(DB_.UpdateRecord("id",UUID,Existing)) { MoveUsage(StorageService()->PolicyDB(),DB_,FromPolicy,ToPolicy,Existing.info.id); diff --git a/src/RESTAPI/RESTAPI_inventory_handler.cpp b/src/RESTAPI/RESTAPI_inventory_handler.cpp index 9ad52c6..7815fe5 100644 --- a/src/RESTAPI/RESTAPI_inventory_handler.cpp +++ b/src/RESTAPI/RESTAPI_inventory_handler.cpp @@ -299,7 +299,8 @@ namespace OpenWifi{ return BadRequest(RESTAPI::Errors::NameMustBeSet); } - AssignIfPresent(RawObject, "rrm",Existing.rrm); + if(RawObject->has("deviceRules")) + Existing.deviceRules = NewObject.deviceRules; std::string FromPolicy, ToPolicy; if(!CreateMove(RawObject,"managementPolicy",&InventoryDB::RecordName::managementPolicy, Existing, FromPolicy, diff --git a/src/RESTAPI/RESTAPI_operators_handler.cpp b/src/RESTAPI/RESTAPI_operators_handler.cpp index c4df8d1..7e512cb 100644 --- a/src/RESTAPI/RESTAPI_operators_handler.cpp +++ b/src/RESTAPI/RESTAPI_operators_handler.cpp @@ -65,13 +65,6 @@ namespace OpenWifi { return BadRequest(RESTAPI::Errors::UnknownManagementPolicyUUID); } - if(NewObject.rrm.empty()) - NewObject.rrm = "inherit"; - - if(!ValidRRM(NewObject.rrm)) { - return BadRequest(RESTAPI::Errors::InvalidRRM); - } - if(!ValidSourceIP(NewObject.sourceIP)) { return BadRequest(RESTAPI::Errors::InvalidIPAddresses); } @@ -143,15 +136,8 @@ namespace OpenWifi { Existing.sourceIP = UpdatedObj.sourceIP; } - if(RawObject->has("rrm")) { - if(!UpdatedObj.rrm.empty() && !ValidRRM(UpdatedObj.rrm)) { - return BadRequest(RESTAPI::Errors::InvalidRRM); - } - Existing.rrm = UpdatedObj.rrm.empty() ? "inherit" : UpdatedObj.rrm; - } - - AssignIfPresent(RawObject, "firmwareUpgrade", Existing.firmwareUpgrade); - AssignIfPresent(RawObject, "firmwareRCOnly", Existing.firmwareRCOnly); + if(RawObject->has("deviceRules")) + Existing.deviceRules = UpdatedObj.deviceRules; return ReturnUpdatedObject(DB_, Existing, *this); } diff --git a/src/RESTAPI/RESTAPI_sub_devices_handler.cpp b/src/RESTAPI/RESTAPI_sub_devices_handler.cpp index 2115cd0..87ed2f0 100644 --- a/src/RESTAPI/RESTAPI_sub_devices_handler.cpp +++ b/src/RESTAPI/RESTAPI_sub_devices_handler.cpp @@ -58,7 +58,7 @@ namespace OpenWifi { !ValidDbId(NewObject.operatorId, StorageService()->OperatorDB(), true, RESTAPI::Errors::InvalidOperatorId, *this) || !ValidDbId(NewObject.serviceClass, StorageService()->ServiceClassDB(), true, RESTAPI::Errors::InvalidServiceClassId, *this) || !ValidSubscriberId(NewObject.subscriberId, true, *this) || - !ValidRRM(NewObject.rrm,*this) || + (RawObject->has("deviceRules") && !ValidDeviceRules(NewObject.deviceRules,*this)) || !ValidSerialNumber(NewObject.serialNumber,false,*this) ) { return; @@ -86,7 +86,7 @@ namespace OpenWifi { !ValidDbId(UpdateObj.operatorId, StorageService()->OperatorDB(), true, RESTAPI::Errors::InvalidOperatorId, *this) || !ValidDbId(UpdateObj.serviceClass, StorageService()->ServiceClassDB(), true, RESTAPI::Errors::InvalidServiceClassId, *this) || !ValidSubscriberId(UpdateObj.subscriberId, true, *this) || - !ValidRRM(UpdateObj.rrm,*this) || + (RawObject->has("deviceRules") && !ValidDeviceRules(UpdateObj.deviceRules,*this)) || !ValidSerialNumber(UpdateObj.serialNumber,false,*this) ) { return; @@ -99,7 +99,8 @@ namespace OpenWifi { AssignIfPresent(RawObject, "serviceClass", Existing.serviceClass); AssignIfPresent(RawObject, "qrCode", Existing.qrCode); AssignIfPresent(RawObject, "geoCode", Existing.geoCode); - AssignIfPresent(RawObject, "rrm", Existing.rrm); + if(RawObject->has("deviceRules")) + Existing.deviceRules = UpdateObj.deviceRules; AssignIfPresent(RawObject, "state", Existing.state); AssignIfPresent(RawObject, "locale", Existing.locale); AssignIfPresent(RawObject, "billingCode", Existing.billingCode); diff --git a/src/RESTAPI/RESTAPI_venue_handler.cpp b/src/RESTAPI/RESTAPI_venue_handler.cpp index dd15c6f..73b1a21 100644 --- a/src/RESTAPI/RESTAPI_venue_handler.cpp +++ b/src/RESTAPI/RESTAPI_venue_handler.cpp @@ -14,6 +14,7 @@ #include "RESTAPI/RESTAPI_db_helpers.h" #include "Tasks/VenueConfigUpdater.h" #include "Tasks/VenueRebooter.h" +#include "Tasks/VenueUpgrade.h" #include "Kafka_ProvUpdater.h" @@ -216,8 +217,7 @@ namespace OpenWifi{ return ReturnObject(Answer); } - auto updateAllDevices = GetBoolParameter("updateAllDevices"); - if(updateAllDevices) { + if(GetBoolParameter("updateAllDevices")) { ProvObjects::SerialNumberList SNL; Poco::JSON::Object Answer; @@ -231,8 +231,21 @@ namespace OpenWifi{ return ReturnObject(Answer); } - auto rebootAllDevices = GetBoolParameter("rebootAllDevices"); - if(rebootAllDevices) { + if(GetBoolParameter("upgradeAllDevices")) { + ProvObjects::SerialNumberList SNL; + + Poco::JSON::Object Answer; + SNL.serialNumbers = Existing.devices; + + auto Task = new VenueUpgrade(UUID,UserInfo_.userinfo,0,Logger()); + auto JobId = Task->Start(); + + SNL.to_json(Answer); + Answer.set("jobId",JobId); + return ReturnObject(Answer); + } + + if(GetBoolParameter("rebootAllDevices")) { ProvObjects::SerialNumberList SNL; Poco::JSON::Object Answer; @@ -256,7 +269,8 @@ namespace OpenWifi{ return BadRequest( RESTAPI::Errors::NameMustBeSet); } - AssignIfPresent(RawObject, "rrm",Existing.rrm); + if(RawObject->has("deviceRules")) + Existing.deviceRules = NewObject.deviceRules; if(RawObject->has("sourceIP")) { if(!NewObject.sourceIP.empty() && !CIDR::ValidateIpRanges(NewObject.sourceIP)) { diff --git a/src/RESTObjects/RESTAPI_ProvObjects.cpp b/src/RESTObjects/RESTAPI_ProvObjects.cpp index b390daf..41f6a20 100644 --- a/src/RESTObjects/RESTAPI_ProvObjects.cpp +++ b/src/RESTObjects/RESTAPI_ProvObjects.cpp @@ -91,7 +91,7 @@ namespace OpenWifi::ProvObjects { field_to_json( Obj,"managementPolicy",managementPolicy); field_to_json( Obj,"deviceConfiguration",deviceConfiguration); field_to_json( Obj,"devices",devices); - field_to_json( Obj,"rrm",rrm); + field_to_json( Obj,"deviceRules",deviceRules); field_to_json( Obj,"sourceIP",sourceIP); field_to_json( Obj,"variables", variables); field_to_json( Obj,"managementPolicies", managementPolicies); @@ -111,7 +111,7 @@ namespace OpenWifi::ProvObjects { field_from_json( Obj,"managementPolicy",managementPolicy); field_from_json( Obj,"deviceConfiguration",deviceConfiguration); field_from_json( Obj,"devices",devices); - field_from_json( Obj,"rrm",rrm); + field_from_json( Obj,"deviceRules",deviceRules); field_from_json( Obj,"sourceIP",sourceIP); field_from_json( Obj,"variables", variables); field_from_json( Obj,"managementPolicies", managementPolicies); @@ -154,7 +154,7 @@ namespace OpenWifi::ProvObjects { field_to_json( Obj,"deviceConfiguration",deviceConfiguration); field_to_json( Obj,"contacts",contacts); field_to_json( Obj,"location",location); - field_to_json( Obj,"rrm",rrm); + field_to_json( Obj,"deviceRules",deviceRules); field_to_json( Obj,"sourceIP",sourceIP); field_to_json( Obj,"variables", variables); field_to_json( Obj,"managementPolicies", managementPolicies); @@ -178,7 +178,7 @@ namespace OpenWifi::ProvObjects { field_from_json( Obj,"deviceConfiguration",deviceConfiguration); field_from_json( Obj,"contacts",contacts); field_from_json( Obj,"location",location); - field_from_json( Obj,"rrm",rrm); + field_from_json( Obj,"deviceRules",deviceRules); field_from_json( Obj,"sourceIP",sourceIP); field_from_json( Obj,"variables", variables); field_from_json( Obj,"managementPolicies", managementPolicies); @@ -197,9 +197,7 @@ namespace OpenWifi::ProvObjects { info.to_json(Obj); field_to_json( Obj,"managementPolicy",managementPolicy); field_to_json( Obj,"managementRoles",managementRoles); - field_to_json( Obj,"rrm",rrm); - field_to_json( Obj,"firmwareUpgrade",firmwareUpgrade); - field_to_json( Obj,"firmwareRCOnly",firmwareRCOnly); + field_to_json( Obj,"deviceRules",deviceRules); field_to_json( Obj,"variables",variables); field_to_json( Obj,"defaultOperator",defaultOperator); field_to_json( Obj,"sourceIP",sourceIP); @@ -211,9 +209,7 @@ namespace OpenWifi::ProvObjects { info.from_json(Obj); field_from_json( Obj,"managementPolicy",managementPolicy); field_from_json( Obj,"managementRoles",managementRoles); - field_from_json( Obj,"rrm",rrm); - field_from_json( Obj,"firmwareUpgrade",firmwareUpgrade); - field_from_json( Obj,"firmwareRCOnly",firmwareRCOnly); + field_from_json( Obj,"deviceRules",deviceRules); field_from_json( Obj,"variables",variables); field_from_json( Obj,"defaultOperator",defaultOperator); field_from_json( Obj,"sourceIP",sourceIP); @@ -598,7 +594,7 @@ namespace OpenWifi::ProvObjects { field_to_json( Obj, "location", location); field_to_json( Obj, "contact", contact); field_to_json( Obj, "deviceConfiguration",deviceConfiguration); - field_to_json( Obj, "rrm",rrm); + field_to_json( Obj,"deviceRules",deviceRules); field_to_json( Obj, "managementPolicy",managementPolicy); field_to_json( Obj, "state",state); field_to_json( Obj, "devClass",devClass); @@ -619,7 +615,7 @@ namespace OpenWifi::ProvObjects { field_from_json( Obj,"location",location); field_from_json( Obj,"contact",contact); field_from_json( Obj,"deviceConfiguration",deviceConfiguration); - field_from_json( Obj,"rrm",rrm); + field_from_json( Obj,"deviceRules",deviceRules); field_from_json( Obj,"managementPolicy",managementPolicy); field_from_json( Obj,"state",state); field_from_json( Obj,"devClass",devClass); @@ -690,8 +686,6 @@ namespace OpenWifi::ProvObjects { info.to_json(Obj); field_to_json( Obj,"managementPolicy",managementPolicy); field_to_json( Obj,"deviceTypes",deviceTypes); - field_to_json( Obj,"firmwareUpgrade",firmwareUpgrade); - field_to_json( Obj,"firmwareRCOnly",firmwareRCOnly); field_to_json( Obj,"subscriberOnly",subscriberOnly); field_to_json( Obj,"entity", entity); field_to_json( Obj,"venue", venue); @@ -699,7 +693,7 @@ namespace OpenWifi::ProvObjects { field_to_json( Obj,"configuration",configuration); field_to_json( Obj,"inUse",inUse); field_to_json( Obj,"variables",variables); - field_to_json( Obj,"rrm",rrm); + field_to_json( Obj,"deviceRules",deviceRules); } bool DeviceConfiguration::from_json(const Poco::JSON::Object::Ptr &Obj) { @@ -714,9 +708,7 @@ namespace OpenWifi::ProvObjects { field_from_json( Obj,"venue", venue); field_from_json( Obj,"subscriber", subscriber); field_from_json( Obj,"configuration",configuration); - field_from_json( Obj,"rrm",rrm); - field_from_json( Obj,"firmwareUpgrade",firmwareUpgrade); - field_from_json( Obj,"firmwareRCOnly",firmwareRCOnly); + field_from_json( Obj,"deviceRules",deviceRules); return true; } catch(...) { @@ -1028,7 +1020,7 @@ namespace OpenWifi::ProvObjects { field_to_json( Obj,"serviceClass", serviceClass); field_to_json( Obj,"qrCode", qrCode); field_to_json( Obj,"geoCode", geoCode); - field_to_json( Obj,"rrm", rrm); + field_to_json( Obj,"deviceRules",deviceRules); field_to_json( Obj,"state", state); field_to_json( Obj,"locale", locale); field_to_json( Obj,"billingCode", billingCode); @@ -1052,7 +1044,7 @@ namespace OpenWifi::ProvObjects { field_from_json( Obj,"serviceClass", serviceClass); field_from_json( Obj,"qrCode", qrCode); field_from_json( Obj,"geoCode", geoCode); - field_from_json( Obj,"rrm", rrm); + field_from_json( Obj,"deviceRules",deviceRules); field_from_json( Obj,"state", state); field_from_json( Obj,"locale", locale); field_from_json( Obj,"billingCode", billingCode); @@ -1153,5 +1145,23 @@ namespace OpenWifi::ProvObjects { return true; } + void DeviceRules::to_json(Poco::JSON::Object &Obj) const { + field_to_json(Obj,"rcOnly",rcOnly); + field_to_json(Obj,"rrm",rrm); + field_to_json(Obj,"firmwareUpgrade",firmwareUpgrade); + } + + bool DeviceRules::from_json(const Poco::JSON::Object::Ptr &Obj) { + try { + field_from_json(Obj,"rcOnly",rcOnly); + field_from_json(Obj,"rrm",rrm); + field_from_json(Obj,"firmwareUpgrade",firmwareUpgrade); + return true; + } catch(...) { + + } + return false; + } + } diff --git a/src/RESTObjects/RESTAPI_ProvObjects.h b/src/RESTObjects/RESTAPI_ProvObjects.h index 1daa230..a52ffc2 100644 --- a/src/RESTObjects/RESTAPI_ProvObjects.h +++ b/src/RESTObjects/RESTAPI_ProvObjects.h @@ -62,6 +62,15 @@ namespace OpenWifi::ProvObjects { }; typedef std::vector ManagementPolicyVec; + struct DeviceRules { + std::string rcOnly{"inherit"}; + std::string rrm{"inherit"}; + std::string firmwareUpgrade{"inherit"}; + + void to_json(Poco::JSON::Object &Obj) const; + bool from_json(const Poco::JSON::Object::Ptr &Obj); + }; + struct Entity { ObjectInfo info; Types::UUID_t parent; @@ -72,7 +81,7 @@ namespace OpenWifi::ProvObjects { Types::UUID_t managementPolicy; Types::UUIDvec_t deviceConfiguration; Types::UUIDvec_t devices; - std::string rrm; + DeviceRules deviceRules; Types::StringVec sourceIP; Types::UUIDvec_t variables; Types::UUIDvec_t managementPolicies; @@ -107,7 +116,7 @@ namespace OpenWifi::ProvObjects { Types::UUIDvec_t deviceConfiguration; Types::UUIDvec_t contacts; std::string location; - std::string rrm; + DeviceRules deviceRules; Types::StringVec sourceIP; Types::UUIDvec_t variables; Types::UUIDvec_t configurations; @@ -375,9 +384,7 @@ namespace OpenWifi::ProvObjects { DeviceConfigurationElementVec configuration; Types::StringVec inUse; Types::UUIDvec_t variables; - std::string rrm; - std::string firmwareUpgrade; - bool firmwareRCOnly=false; + DeviceRules deviceRules; bool subscriberOnly=false; std::string venue; std::string entity; @@ -401,7 +408,7 @@ namespace OpenWifi::ProvObjects { std::string location; std::string contact; std::string deviceConfiguration; - std::string rrm; + DeviceRules deviceRules; Types::UUID_t managementPolicy; std::string state; std::string devClass; @@ -582,9 +589,7 @@ namespace OpenWifi::ProvObjects { ObjectInfo info; Types::UUID_t managementPolicy; Types::UUIDvec_t managementRoles; - std::string rrm; - std::string firmwareUpgrade; - bool firmwareRCOnly=true; + DeviceRules deviceRules; std::vector variables; bool defaultOperator=false; Types::StringVec sourceIP; @@ -655,7 +660,7 @@ namespace OpenWifi::ProvObjects { Types::UUID_t serviceClass; std::string qrCode; std::string geoCode; - std::string rrm{"inherit"}; + DeviceRules deviceRules; std::string state; std::string locale; std::string billingCode; diff --git a/src/StorageService.cpp b/src/StorageService.cpp index b185491..f8fbd60 100644 --- a/src/StorageService.cpp +++ b/src/StorageService.cpp @@ -247,7 +247,7 @@ namespace OpenWifi { Root.info.id = EntityDB::RootUUID(); Root.info.name = "Top Entity"; Root.info.created = Root.info.modified = OpenWifi::Now(); - Root.rrm = "off"; + Root.deviceRules.rrm = "off"; EntityDB().CreateRecord(Root); } @@ -258,7 +258,7 @@ namespace OpenWifi { DefOp.info.name = "Default Operator"; DefOp.defaultOperator = true; DefOp.info.created = DefOp.info.modified = OpenWifi::Now(); - DefOp.rrm = "inherit"; + DefOp.deviceRules.rrm = "inherit"; OperatorDB_->CreateRecord(DefOp); ProvObjects::ServiceClass DefSer; diff --git a/src/Tasks/VenueUpgrade.h b/src/Tasks/VenueUpgrade.h new file mode 100644 index 0000000..602fa07 --- /dev/null +++ b/src/Tasks/VenueUpgrade.h @@ -0,0 +1,180 @@ +// +// Created by stephane bourque on 2022-05-12. +// + +#pragma once + +#include "framework/MicroService.h" +#include "framework/WebSocketClientNotifications.h" + +#include "StorageService.h" +#include "APConfig.h" +#include "sdks/SDK_gw.h" +#include "sdks/SDK_fms.h" + +namespace OpenWifi { + class VenueDeviceUpgrade : public Poco::Runnable { + public: + VenueDeviceUpgrade(const std::string &UUID, const std::string &venue, [[maybe_unused]] const std::string &fw_rules, Poco::Logger &L) : + uuid_(UUID), + venue_(venue), + Logger_(L) { + } + + void run() final { + ProvObjects::InventoryTag Device; + started_=true; + if(StorageService()->InventoryDB().GetRecord("id",uuid_,Device)) { + SerialNumber = Device.serialNumber; + // get the latest firmware for device type + if (SDK::GW::Device::Reboot(Device.serialNumber, 0)) { + Logger().debug(fmt::format("{}: Upgraded.",Device.serialNumber)); + upgraded_++; + } else { + Logger().information(fmt::format("{}: Not Upgraded.", Device.serialNumber)); + failed_++; + } + } + done_ = true; + // std::cout << "Done push for " << Device.serialNumber << std::endl; + } + + uint64_t upgraded_=0, failed_=0; + bool started_ = false, + done_ = false; + std::string SerialNumber; + + private: + std::string uuid_; + std::string venue_; + Poco::Logger &Logger_; + inline Poco::Logger & Logger() { return Logger_; } + }; + + class VenueUpgrade: public Poco::Runnable { + public: + explicit VenueUpgrade(const std::string & VenueUUID, const SecurityObjects::UserInfo &UI, uint64_t When, Poco::Logger &L) : + VenueUUID_(VenueUUID), + UI_(UI), + When_(When), + Logger_(L) + { + + } + + inline std::string Start() { + JobId_ = MicroService::CreateUUID(); + Worker_.start(*this); + return JobId_; + } + + private: + std::string VenueUUID_; + SecurityObjects::UserInfo UI_; + uint64_t When_; + Poco::Logger &Logger_; + Poco::Thread Worker_; + std::string JobId_; + Poco::ThreadPool Pool_{2,16,300}; + + inline Poco::Logger & Logger() { return Logger_; } + + inline void run() final { + + if(When_ && When_>OpenWifi::Now()) + Poco::Thread::trySleep( (long) (When_ - OpenWifi::Now()) * 1000 ); + + WebSocketClientNotificationVenueRebootList_t N; + + Logger().information(fmt::format("Job {} Starting.", JobId_)); + + ProvObjects::Venue Venue; + uint64_t upgraded_ = 0, failed_ = 0; + if(StorageService()->VenueDB().GetRecord("id",VenueUUID_,Venue)) { + const std::size_t MaxThreads=16; + struct tState { + Poco::Thread thr_; + VenueDeviceUpgrade *task= nullptr; + }; + + N.content.title = fmt::format("Upgrading {} devices.", Venue.info.name); + N.content.jobId = JobId_; + + std::array Tasks; + + for(const auto &uuid:Venue.devices) { + std::string fw_rules; + auto NewTask = new VenueDeviceUpgrade(uuid, Venue.info.name, fw_rules,Logger()); + // std::cout << "Scheduling config push for " << uuid << std::endl; + bool found_slot = false; + while (!found_slot) { + for (auto &cur_task: Tasks) { + if (cur_task.task == nullptr) { + cur_task.task = NewTask; + cur_task.thr_.start(*NewTask); + found_slot = true; + break; + } + } + + // Let's look for a slot... + if (!found_slot) { + for (auto &cur_task: Tasks) { + if (cur_task.task != nullptr && cur_task.task->started_) { + if (cur_task.thr_.isRunning()) + continue; + if (!cur_task.thr_.isRunning() && cur_task.task->done_) { + cur_task.thr_.join(); + upgraded_ += cur_task.task->upgraded_; + failed_ += cur_task.task->failed_; + cur_task.task->started_ = cur_task.task->done_ = false; + delete cur_task.task; + cur_task.task = nullptr; + } + } + } + } + } + } + Logger().debug("Waiting for outstanding update threads to finish."); + bool stillTasksRunning=true; + while(stillTasksRunning) { + stillTasksRunning = false; + for(auto &cur_task:Tasks) { + if(cur_task.task!= nullptr && cur_task.task->started_) { + if(cur_task.thr_.isRunning()) { + stillTasksRunning = true; + continue; + } + if(!cur_task.thr_.isRunning() && cur_task.task->done_) { + cur_task.thr_.join(); + if(cur_task.task->upgraded_) { + upgraded_++; + N.content.success.push_back(cur_task.task->SerialNumber); + } else if(cur_task.task->failed_) { + failed_++; + N.content.warning.push_back(cur_task.task->SerialNumber); + } + cur_task.task->started_ = cur_task.task->done_ = false; + delete cur_task.task; + cur_task.task = nullptr; + } + } + } + } + + N.content.details = fmt::format("Job {} Completed: {} upgraded, {} failed to upgrade.", + JobId_, upgraded_ ,failed_); + + } else { + N.content.details = fmt::format("Venue {} no longer exists.",VenueUUID_); + Logger().warning(N.content.details); + } + + WebSocketClientNotificationVenueRebootCompletionToUser(UI_.email,N); + Logger().information(fmt::format("Job {} Completed: {} upgraded, {} failed to upgrade.", + JobId_, upgraded_ ,failed_)); + delete this; + } + }; +} \ No newline at end of file diff --git a/src/sdks/SDK_fms.cpp b/src/sdks/SDK_fms.cpp new file mode 100644 index 0000000..f90de96 --- /dev/null +++ b/src/sdks/SDK_fms.cpp @@ -0,0 +1,34 @@ +// +// Created by stephane bourque on 2022-05-12. +// + +#include "SDK_fms.h" +#include "framework/MicroService.h" +#include "RESTObjects/RESTAPI_FMSObjects.h" + +namespace OpenWifi::SDK::FMS { + + namespace Firmware { + + bool GetLatest(const std::string &device_type, bool RCOnly, FMSObjects::Firmware & FirmWare) { + static const std::string EndPoint{"/api/v1/firmwares"}; + + OpenWifi::OpenAPIRequestGet API( uSERVICE_FIRMWARE, + EndPoint, + { { "latestOnly" , "true"}, + { "deviceType", device_type}, + { "rcOnly" , RCOnly ? "true" : "false" } + }, + 50000); + + auto CallResponse = Poco::makeShared(); + auto StatusCode = API.Do(CallResponse); + if( StatusCode == Poco::Net::HTTPResponse::HTTP_OK) { + return FirmWare.from_json(CallResponse); + } + return false; + } + + } + +}; diff --git a/src/sdks/SDK_fms.h b/src/sdks/SDK_fms.h new file mode 100644 index 0000000..b1dafdb --- /dev/null +++ b/src/sdks/SDK_fms.h @@ -0,0 +1,18 @@ +// +// Created by stephane bourque on 2022-05-12. +// + +#pragma once + +#include +#include "RESTObjects/RESTAPI_FMSObjects.h" + +namespace OpenWifi::SDK::FMS { + + namespace Firmware { + bool GetLatest(const std::string &device_type, bool RCOnly, FMSObjects::Firmware & FirmWare); + } + +}; + + diff --git a/src/storage/storage_configurations.cpp b/src/storage/storage_configurations.cpp index 3c2a742..92b139f 100644 --- a/src/storage/storage_configurations.cpp +++ b/src/storage/storage_configurations.cpp @@ -28,10 +28,8 @@ namespace OpenWifi { ORM::Field{"configuration",ORM::FieldType::FT_TEXT}, ORM::Field{"inUse",ORM::FieldType::FT_TEXT}, ORM::Field{"variables",ORM::FieldType::FT_TEXT}, - ORM::Field{"rrm",ORM::FieldType::FT_TEXT}, + ORM::Field{"deviceRules",ORM::FieldType::FT_TEXT}, ORM::Field{"tags",ORM::FieldType::FT_TEXT}, - ORM::Field{"firmwareUpgrade",ORM::FieldType::FT_TEXT}, - ORM::Field{"firmwareRCOnly",ORM::FieldType::FT_INT}, ORM::Field{"subscriberOnly",ORM::FieldType::FT_BOOLEAN}, ORM::Field{"entity",ORM::FieldType::FT_TEXT}, ORM::Field{"venue",ORM::FieldType::FT_TEXT}, @@ -50,7 +48,8 @@ namespace OpenWifi { "alter table " + TableName_ + " add column subscriberOnly BOOLEAN;", "alter table " + TableName_ + " add column entity TEXT;", "alter table " + TableName_ + " add column subscriber TEXT;", - "alter table " + TableName_ + " add column venue TEXT;" + "alter table " + TableName_ + " add column venue TEXT;", + "alter table " + TableName_ + " add column deviceRules TEXT;" }; RunScript(Statements); to = 2; @@ -149,14 +148,12 @@ template<> void ORM::DB< OpenWifi::ConfigurationDBRecordType, OpenWifi::ProvO Out.configuration = OpenWifi::RESTAPI_utils::to_object_array(In.get<8>()); Out.inUse = OpenWifi::RESTAPI_utils::to_object_array(In.get<9>()); Out.variables = OpenWifi::RESTAPI_utils::to_object_array(In.get<10>()); - Out.rrm = In.get<11>(); + Out.deviceRules = OpenWifi::RESTAPI_utils::to_object(In.get<11>()); Out.info.tags = OpenWifi::RESTAPI_utils::to_taglist(In.get<12>()); - Out.firmwareUpgrade = In.get<13>(); - Out.firmwareRCOnly = In.get<14>(); - Out.subscriberOnly = In.get<15>(); - Out.entity = In.get<16>(); - Out.venue = In.get<17>(); - Out.subscriber = In.get<18>(); + Out.subscriberOnly = In.get<13>(); + Out.entity = In.get<14>(); + Out.venue = In.get<15>(); + Out.subscriber = In.get<16>(); } template<> void ORM::DB< OpenWifi::ConfigurationDBRecordType, OpenWifi::ProvObjects::DeviceConfiguration>::Convert(const OpenWifi::ProvObjects::DeviceConfiguration &In, OpenWifi::ConfigurationDBRecordType &Out) { @@ -171,12 +168,10 @@ template<> void ORM::DB< OpenWifi::ConfigurationDBRecordType, OpenWifi::ProvO Out.set<8>(OpenWifi::RESTAPI_utils::to_string(In.configuration)); Out.set<9>(OpenWifi::RESTAPI_utils::to_string(In.inUse)); Out.set<10>(OpenWifi::RESTAPI_utils::to_string(In.variables)); - Out.set<11>(In.rrm); + Out.set<11>(OpenWifi::RESTAPI_utils::to_string(In.deviceRules)); Out.set<12>(OpenWifi::RESTAPI_utils::to_string(In.info.tags)); - Out.set<13>(In.firmwareUpgrade); - Out.set<14>(In.firmwareRCOnly); - Out.set<15>(In.subscriberOnly); - Out.set<16>(In.entity); - Out.set<17>(In.venue); - Out.set<18>(In.subscriber); + Out.set<13>(In.subscriberOnly); + Out.set<14>(In.entity); + Out.set<15>(In.venue); + Out.set<16>(In.subscriber); } diff --git a/src/storage/storage_configurations.h b/src/storage/storage_configurations.h index 534e7bb..6f7ed0a 100644 --- a/src/storage/storage_configurations.h +++ b/src/storage/storage_configurations.h @@ -26,8 +26,6 @@ namespace OpenWifi { std::string, std::string, std::string, - std::string, - uint32_t, bool, std::string, std::string, diff --git a/src/storage/storage_entity.cpp b/src/storage/storage_entity.cpp index 8269d7a..208747d 100644 --- a/src/storage/storage_entity.cpp +++ b/src/storage/storage_entity.cpp @@ -30,7 +30,7 @@ namespace OpenWifi { ORM::Field{"venues",ORM::FieldType::FT_TEXT}, ORM::Field{"deviceConfiguration",ORM::FieldType::FT_TEXT}, ORM::Field{"devices",ORM::FieldType::FT_TEXT}, - ORM::Field{"rrm",ORM::FieldType::FT_TEXT}, + ORM::Field{"deviceRules",ORM::FieldType::FT_TEXT}, ORM::Field{"tags",ORM::FieldType::FT_TEXT}, ORM::Field{"sourceIP",ORM::FieldType::FT_TEXT}, ORM::Field{"variables",ORM::FieldType::FT_TEXT}, @@ -58,7 +58,8 @@ namespace OpenWifi { "alter table " + TableName_ + " add column managementPolicies text", "alter table " + TableName_ + " add column maps text", "alter table " + TableName_ + " add column configurations text", - "alter table " + TableName_ + " add column managementRoles text" + "alter table " + TableName_ + " add column managementRoles text", + "alter table " + TableName_ + " add column deviceRules text" }; for(const auto &i:Script) { @@ -210,7 +211,7 @@ template<> void ORM::DB< OpenWifi::EntityDBRecordType, OpenWifi::ProvObjects: Out.venues = OpenWifi::RESTAPI_utils::to_object_array(In.get<11>()); Out.deviceConfiguration = OpenWifi::RESTAPI_utils::to_object_array(In.get<12>()); Out.devices = OpenWifi::RESTAPI_utils::to_object_array(In.get<13>()); - Out.rrm = In.get<14>(); + Out.deviceRules = OpenWifi::RESTAPI_utils::to_object(In.get<14>()); Out.info.tags = OpenWifi::RESTAPI_utils::to_taglist(In.get<15>()); Out.sourceIP = OpenWifi::RESTAPI_utils::to_object_array(In.get<16>()); Out.variables = OpenWifi::RESTAPI_utils::to_object_array(In.get<17>()); @@ -235,7 +236,7 @@ template<> void ORM::DB< OpenWifi::EntityDBRecordType, OpenWifi::ProvObjects: Out.set<11>(OpenWifi::RESTAPI_utils::to_string(In.venues)); Out.set<12>(OpenWifi::RESTAPI_utils::to_string(In.deviceConfiguration)); Out.set<13>(OpenWifi::RESTAPI_utils::to_string(In.devices)); - Out.set<14>(In.rrm); + Out.set<14>(OpenWifi::RESTAPI_utils::to_string(In.deviceRules)); Out.set<15>(OpenWifi::RESTAPI_utils::to_string(In.info.tags)); Out.set<16>(OpenWifi::RESTAPI_utils::to_string(In.sourceIP)); Out.set<17>(OpenWifi::RESTAPI_utils::to_string(In.variables)); diff --git a/src/storage/storage_inventory.cpp b/src/storage/storage_inventory.cpp index cddaa1b..9555d50 100644 --- a/src/storage/storage_inventory.cpp +++ b/src/storage/storage_inventory.cpp @@ -37,7 +37,7 @@ namespace OpenWifi { ORM::Field{"location",ORM::FieldType::FT_TEXT}, ORM::Field{"contact",ORM::FieldType::FT_TEXT}, ORM::Field{"deviceConfiguration",ORM::FieldType::FT_TEXT}, - ORM::Field{"rrm",ORM::FieldType::FT_TEXT}, + ORM::Field{"deviceRules",ORM::FieldType::FT_TEXT}, ORM::Field{"tags",ORM::FieldType::FT_TEXT}, ORM::Field{"managementPolicy",ORM::FieldType::FT_TEXT}, ORM::Field{"state",ORM::FieldType::FT_TEXT}, @@ -63,7 +63,8 @@ namespace OpenWifi { "alter table " + TableName_ + " add column state text" , "alter table " + TableName_ + " add column locale varchar(16)" , "alter table " + TableName_ + " add column realMacAddress text" , - "alter table " + TableName_ + " add column devClass text" + "alter table " + TableName_ + " add column devClass text", + "alter table " + TableName_ + " add column deviceRules text" }; for(const auto &i:Script) { @@ -194,12 +195,12 @@ namespace OpenWifi { ProvObjects::DeviceConfiguration C; for(const auto &i:E.deviceConfiguration) { if(StorageService()->ConfigurationDB().GetRecord("id",i,C)) { - if(C.firmwareUpgrade=="no") { + if(C.deviceRules.firmwareUpgrade=="no") { Rules = ProvObjects::dont_upgrade; return false; } - if(C.firmwareUpgrade=="yes") { - if(C.firmwareRCOnly) + if(C.deviceRules.firmwareUpgrade=="yes") { + if(C.deviceRules.rcOnly=="yes") Rules = ProvObjects::upgrade_release_only; else Rules = ProvObjects::upgrade_latest; @@ -226,12 +227,12 @@ namespace OpenWifi { ProvObjects::DeviceConfiguration C; for(const auto &i:V.deviceConfiguration) { if(StorageService()->ConfigurationDB().GetRecord("id",i,C)) { - if(C.firmwareUpgrade=="no") { + if(C.deviceRules.firmwareUpgrade=="no") { Rules = ProvObjects::dont_upgrade; return false; } - if(C.firmwareUpgrade=="yes") { - if(C.firmwareRCOnly) + if(C.deviceRules.firmwareUpgrade=="yes") { + if(C.deviceRules.rcOnly=="yes") Rules = ProvObjects::upgrade_release_only; else Rules = ProvObjects::upgrade_latest; @@ -261,12 +262,12 @@ namespace OpenWifi { if(!T.deviceConfiguration.empty()) { ProvObjects::DeviceConfiguration C; if(StorageService()->ConfigurationDB().GetRecord("id",T.deviceConfiguration,C)) { - if(C.firmwareUpgrade=="no") { + if(C.deviceRules.firmwareUpgrade=="no") { Rules = ProvObjects::dont_upgrade; return false; } - if(C.firmwareUpgrade=="yes") { - if(C.firmwareRCOnly) + if(C.deviceRules.firmwareUpgrade=="yes") { + if(C.deviceRules.rcOnly=="yes") Rules = ProvObjects::upgrade_release_only; else Rules = ProvObjects::upgrade_latest; @@ -299,12 +300,12 @@ namespace OpenWifi { try { ProvObjects::Entity E; if(StorageService()->EntityDB().GetRecord("id", Entity, E)) { - if(E.rrm == "inherit") { + if(E.deviceRules.rrm == "inherit") { if(!E.parent.empty()) return LookForRRMInEntity(E.parent); return false; } - if(E.rrm=="no") + if(E.deviceRules.rrm=="no") return false; return true; } @@ -319,14 +320,14 @@ namespace OpenWifi { try { ProvObjects::Venue V; if(StorageService()->VenueDB().GetRecord("id", Venue, V)) { - if(V.rrm == "inherit") { + if(V.deviceRules.rrm == "inherit") { if(!V.parent.empty()) return LookForRRMInVenue(V.parent); if(!V.entity.empty()) return LookForRRMInEntity(V.entity); return false; } - if(V.rrm=="no") + if(V.deviceRules.rrm=="no") return false; return true; } @@ -353,9 +354,9 @@ namespace OpenWifi { std::string SerialNumber = Utils::IntToSerialNumber(i); ProvObjects::InventoryTag Tag; if(StorageService()->InventoryDB().GetRecord("serialNumber",SerialNumber,Tag)) { - if(Tag.rrm=="no") + if(Tag.deviceRules.rrm=="no") continue; - if(Tag.rrm=="inherit") { + if(Tag.deviceRules.rrm=="inherit") { if(!LookForRRM(Tag)) continue; } @@ -383,7 +384,7 @@ template<> void ORM::DB< OpenWifi::InventoryDBRecordType, OpenWifi::ProvObjec Out.location = In.get<13>(); Out.contact = In.get<14>(); Out.deviceConfiguration = In.get<15>(); - Out.rrm = In.get<16>(); + Out.deviceRules = OpenWifi::RESTAPI_utils::to_object(In.get<16>()); Out.info.tags = OpenWifi::RESTAPI_utils::to_taglist(In.get<17>()); Out.managementPolicy = In.get<18>(); Out.state = In.get<19>(); @@ -409,7 +410,7 @@ template<> void ORM::DB< OpenWifi::InventoryDBRecordType, OpenWifi::ProvObjec Out.set<13>(In.location); Out.set<14>(In.contact); Out.set<15>(In.deviceConfiguration); - Out.set<16>(In.rrm); + Out.set<16>(OpenWifi::RESTAPI_utils::to_string(In.deviceRules)); Out.set<17>(OpenWifi::RESTAPI_utils::to_string(In.info.tags)); Out.set<18>(In.managementPolicy); Out.set<19>(In.state); diff --git a/src/storage/storage_operataor.cpp b/src/storage/storage_operataor.cpp index c2cf91e..352c0ee 100644 --- a/src/storage/storage_operataor.cpp +++ b/src/storage/storage_operataor.cpp @@ -20,9 +20,7 @@ namespace OpenWifi { ORM::Field{"modified",ORM::FieldType::FT_BIGINT}, ORM::Field{"managementPolicy",ORM::FieldType::FT_TEXT}, ORM::Field{"managementRoles",ORM::FieldType::FT_TEXT}, - ORM::Field{"rrm",ORM::FieldType::FT_TEXT}, - ORM::Field{"firmwareUpgrade",ORM::FieldType::FT_TEXT}, - ORM::Field{"firmwareRCOnly",ORM::FieldType::FT_BOOLEAN}, + ORM::Field{"deviceRules",ORM::FieldType::FT_TEXT}, ORM::Field{"variables",ORM::FieldType::FT_TEXT}, ORM::Field{"defaultOperator",ORM::FieldType::FT_BOOLEAN}, ORM::Field{"sourceIP",ORM::FieldType::FT_TEXT}, @@ -43,7 +41,7 @@ namespace OpenWifi { bool OperatorDB::Upgrade([[maybe_unused]] uint32_t from, uint32_t &to) { to = Version(); std::vector Script{ - + "alter table " + TableName_ + " add column deviceRules text" }; RunScript(Script); @@ -80,13 +78,11 @@ template<> void ORM::DB< OpenWifi::OperatorDBRecordType, OpenWifi::ProvObject Out.info.modified = In.get<5>(); Out.managementPolicy = In.get<6>(); Out.managementRoles = OpenWifi::RESTAPI_utils::to_object_array(In.get<7>()); - Out.rrm = In.get<8>(); - Out.firmwareUpgrade = In.get<9>(); - Out.firmwareRCOnly = In.get<10>(); - Out.variables = OpenWifi::RESTAPI_utils::to_object_array(In.get<11>()); - Out.defaultOperator = In.get<12>(); - Out.sourceIP = OpenWifi::RESTAPI_utils::to_object_array(In.get<13>()); - Out.registrationId = In.get<14>(); + Out.deviceRules = OpenWifi::RESTAPI_utils::to_object(In.get<8>()); + Out.variables = OpenWifi::RESTAPI_utils::to_object_array(In.get<9>()); + Out.defaultOperator = In.get<10>(); + Out.sourceIP = OpenWifi::RESTAPI_utils::to_object_array(In.get<11>()); + Out.registrationId = In.get<12>(); } template<> void ORM::DB< OpenWifi::OperatorDBRecordType, OpenWifi::ProvObjects::Operator>::Convert(const OpenWifi::ProvObjects::Operator &In, OpenWifi::OperatorDBRecordType &Out) { @@ -98,11 +94,9 @@ template<> void ORM::DB< OpenWifi::OperatorDBRecordType, OpenWifi::ProvObject Out.set<5>(In.info.modified); Out.set<6>(In.managementPolicy); Out.set<7>(OpenWifi::RESTAPI_utils::to_string(In.managementRoles)); - Out.set<8>(In.rrm); - Out.set<9>(In.firmwareUpgrade); - Out.set<10>(In.firmwareRCOnly); - Out.set<11>(OpenWifi::RESTAPI_utils::to_string(In.variables)); - Out.set<12>(In.defaultOperator); - Out.set<13>(OpenWifi::RESTAPI_utils::to_string(In.sourceIP)); - Out.set<14>(In.registrationId); + Out.set<8>(OpenWifi::RESTAPI_utils::to_string(In.deviceRules)); + Out.set<9>(OpenWifi::RESTAPI_utils::to_string(In.variables)); + Out.set<10>(In.defaultOperator); + Out.set<11>(OpenWifi::RESTAPI_utils::to_string(In.sourceIP)); + Out.set<12>(In.registrationId); } diff --git a/src/storage/storage_operataor.h b/src/storage/storage_operataor.h index 38508a5..bdefd88 100644 --- a/src/storage/storage_operataor.h +++ b/src/storage/storage_operataor.h @@ -22,8 +22,6 @@ namespace OpenWifi { std::string, bool, std::string, - bool, - std::string, std::string > OperatorDBRecordType; diff --git a/src/storage/storage_sub_devices.cpp b/src/storage/storage_sub_devices.cpp index 12716c9..4aa0f1f 100644 --- a/src/storage/storage_sub_devices.cpp +++ b/src/storage/storage_sub_devices.cpp @@ -28,28 +28,26 @@ namespace OpenWifi { ORM::Field{"serviceClass",ORM::FieldType::FT_TEXT}, ORM::Field{"qrCode",ORM::FieldType::FT_TEXT}, ORM::Field{"geoCode",ORM::FieldType::FT_TEXT}, - ORM::Field{"rrm",ORM::FieldType::FT_TEXT}, + ORM::Field{"deviceRules",ORM::FieldType::FT_TEXT}, ORM::Field{"state",ORM::FieldType::FT_TEXT}, ORM::Field{"locale",ORM::FieldType::FT_TEXT}, ORM::Field{"billingCode",ORM::FieldType::FT_TEXT}, ORM::Field{"configuration",ORM::FieldType::FT_TEXT}, ORM::Field{"suspended",ORM::FieldType::FT_BOOLEAN}, - ORM::Field{"realMacAddress",ORM::FieldType::FT_TEXT}, - ORM::Field{"firmwareRCOnly",ORM::FieldType::FT_TEXT}, - ORM::Field{"firmwareUpgrade",ORM::FieldType::FT_TEXT} + ORM::Field{"realMacAddress",ORM::FieldType::FT_TEXT} }; static ORM::IndexVec SubscriberDeviceDB_Indexes{ - { std::string("subscriber_device_name_index3"), + { std::string("subscriber_device_name_index4"), ORM::IndexEntryVec{ {std::string("name"), ORM::Indextype::ASC} } }, - { std::string("subscriber_device_serialNumber_index3"), + { std::string("subscriber_device_serialNumber_index4"), ORM::IndexEntryVec{ {std::string("serialNumber"), ORM::Indextype::ASC} } } , - { std::string("subscriber_device_realMacAddress_index3"), + { std::string("subscriber_device_realMacAddress_index4"), ORM::IndexEntryVec{ {std::string("realMacAddress"), ORM::Indextype::ASC} } } }; SubscriberDeviceDB::SubscriberDeviceDB( OpenWifi::DBType T, Poco::Data::SessionPool & P, Poco::Logger &L) : - DB(T, "sub_devices3", SubscriberDeviceDB_Fields, SubscriberDeviceDB_Indexes, P, L, "sdv") { + DB(T, "sub_devices4", SubscriberDeviceDB_Fields, SubscriberDeviceDB_Indexes, P, L, "sdv") { } bool SubscriberDeviceDB::Upgrade([[maybe_unused]] uint32_t from, uint32_t &to) { @@ -78,15 +76,13 @@ template<> void ORM::DB< OpenWifi::SubDeviceDBRecordType, OpenWifi::ProvObjec Out.serviceClass = In.get<13>(); Out.qrCode = In.get<14>(); Out.geoCode = In.get<15>(); - Out.rrm = In.get<16>(); + Out.deviceRules = OpenWifi::RESTAPI_utils::to_object(In.get<16>()); Out.state = In.get<17>(); Out.locale = In.get<18>(); Out.billingCode = In.get<19>(); Out.configuration = OpenWifi::RESTAPI_utils::to_object_array(In.get<20>()); Out.suspended = In.get<21>(); Out.realMacAddress = In.get<22>(); - Out.firmwareRCOnly = In.get<23>(); - Out.firmwareUpgrade = In.get<24>(); } template<> void ORM::DB< OpenWifi::SubDeviceDBRecordType, OpenWifi::ProvObjects::SubscriberDevice>::Convert(const OpenWifi::ProvObjects::SubscriberDevice &In, OpenWifi::SubDeviceDBRecordType &Out) { @@ -106,13 +102,11 @@ template<> void ORM::DB< OpenWifi::SubDeviceDBRecordType, OpenWifi::ProvObjec Out.set<13>(In.serviceClass); Out.set<14>(In.qrCode); Out.set<15>(In.geoCode); - Out.set<16>(In.rrm); + Out.set<16>(OpenWifi::RESTAPI_utils::to_string(In.deviceRules)); Out.set<17>(In.state); Out.set<18>(In.locale); Out.set<19>(In.billingCode); Out.set<20>(OpenWifi::RESTAPI_utils::to_string(In.configuration)); Out.set<21>(In.suspended); Out.set<22>(In.realMacAddress); - Out.set<23>(In.firmwareRCOnly); - Out.set<24>(In.firmwareUpgrade); } diff --git a/src/storage/storage_sub_devices.h b/src/storage/storage_sub_devices.h index 6c35450..1c29828 100644 --- a/src/storage/storage_sub_devices.h +++ b/src/storage/storage_sub_devices.h @@ -42,8 +42,6 @@ namespace OpenWifi { std::string, std::string, bool, - std::string, - std::string, std::string > SubDeviceDBRecordType; diff --git a/src/storage/storage_venue.cpp b/src/storage/storage_venue.cpp index 240537d..a7b568b 100644 --- a/src/storage/storage_venue.cpp +++ b/src/storage/storage_venue.cpp @@ -33,7 +33,7 @@ namespace OpenWifi { ORM::Field{"design",ORM::FieldType::FT_TEXT}, ORM::Field{"contacts",ORM::FieldType::FT_TEXT}, ORM::Field{"location",ORM::FieldType::FT_TEXT}, - ORM::Field{"rrm",ORM::FieldType::FT_TEXT}, + ORM::Field{"deviceRules",ORM::FieldType::FT_TEXT}, ORM::Field{"tags",ORM::FieldType::FT_TEXT}, ORM::Field{"deviceConfiguration",ORM::FieldType::FT_TEXT}, ORM::Field{"sourceIP",ORM::FieldType::FT_TEXT}, @@ -65,6 +65,7 @@ namespace OpenWifi { "alter table " + TableName_ + " add column managementPolicies text", "alter table " + TableName_ + " add column boards text", "alter table " + TableName_ + " rename column contact to contacts", + "alter table " + TableName_ + " add column deviceRules text" }; for(const auto &i:Script) { @@ -116,7 +117,7 @@ template<> void ORM::DB< OpenWifi::VenueDBRecordType, OpenWifi::ProvObjects:: Out.design = In.get<12>(); Out.contacts = OpenWifi::RESTAPI_utils::to_object_array(In.get<13>()); Out.location = In.get<14>(); - Out.rrm = In.get<15>(); + Out.deviceRules = OpenWifi::RESTAPI_utils::to_object(In.get<15>()); Out.info.tags = OpenWifi::RESTAPI_utils::to_taglist(In.get<16>()); Out.deviceConfiguration = OpenWifi::RESTAPI_utils::to_object_array(In.get<17>()); Out.sourceIP = OpenWifi::RESTAPI_utils::to_object_array(In.get<18>()); @@ -144,7 +145,7 @@ template<> void ORM::DB< OpenWifi::VenueDBRecordType, OpenWifi::ProvObjects:: Out.set<12>(In.design); Out.set<13>(OpenWifi::RESTAPI_utils::to_string(In.contacts)); Out.set<14>(In.location); - Out.set<15>(In.rrm); + Out.set<15>(OpenWifi::RESTAPI_utils::to_string(In.deviceRules)); Out.set<16>(OpenWifi::RESTAPI_utils::to_string(In.info.tags)); Out.set<17>(OpenWifi::RESTAPI_utils::to_string(In.deviceConfiguration)); Out.set<18>(OpenWifi::RESTAPI_utils::to_string(In.sourceIP));