mirror of
				https://github.com/Telecominfraproject/wlan-cloud-owprov.git
				synced 2025-11-04 04:28:01 +00:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			fix_improv
			...
			release/v3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					36f491b1e2 | ||
| 
						 | 
					f39388d994 | ||
| 
						 | 
					d1a830bcb4 | 
							
								
								
									
										2
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							@@ -21,7 +21,7 @@ defaults:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  docker:
 | 
					  docker:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-20.04
 | 
				
			||||||
    env:
 | 
					    env:
 | 
				
			||||||
      DOCKER_REGISTRY_URL: tip-tip-wlan-cloud-ucentral.jfrog.io
 | 
					      DOCKER_REGISTRY_URL: tip-tip-wlan-cloud-ucentral.jfrog.io
 | 
				
			||||||
      DOCKER_REGISTRY_USERNAME: ucentral
 | 
					      DOCKER_REGISTRY_USERNAME: ucentral
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
cmake_minimum_required(VERSION 3.13)
 | 
					cmake_minimum_required(VERSION 3.13)
 | 
				
			||||||
project(owprov VERSION 3.2.1)
 | 
					project(owprov VERSION 3.1.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set(CMAKE_CXX_STANDARD 17)
 | 
					set(CMAKE_CXX_STANDARD 17)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ fullnameOverride: ""
 | 
				
			|||||||
images:
 | 
					images:
 | 
				
			||||||
  owprov:
 | 
					  owprov:
 | 
				
			||||||
    repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owprov
 | 
					    repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owprov
 | 
				
			||||||
    tag: main
 | 
					    tag: v3.1.0
 | 
				
			||||||
    pullPolicy: Always
 | 
					    pullPolicy: Always
 | 
				
			||||||
#    regcred:
 | 
					#    regcred:
 | 
				
			||||||
#      registry: tip-tip-wlan-cloud-ucentral.jfrog.io
 | 
					#      registry: tip-tip-wlan-cloud-ucentral.jfrog.io
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,6 @@
 | 
				
			|||||||
#include "AutoDiscovery.h"
 | 
					#include "AutoDiscovery.h"
 | 
				
			||||||
#include "Poco/JSON/Parser.h"
 | 
					#include "Poco/JSON/Parser.h"
 | 
				
			||||||
#include "StorageService.h"
 | 
					#include "StorageService.h"
 | 
				
			||||||
#include "Tasks/VenueConfigUpdater.h"
 | 
					 | 
				
			||||||
#include "framework/KafkaManager.h"
 | 
					#include "framework/KafkaManager.h"
 | 
				
			||||||
#include "framework/KafkaTopics.h"
 | 
					#include "framework/KafkaTopics.h"
 | 
				
			||||||
#include "framework/ow_constants.h"
 | 
					#include "framework/ow_constants.h"
 | 
				
			||||||
@@ -108,11 +107,6 @@ namespace OpenWifi {
 | 
				
			|||||||
                        if (!SerialNumber.empty() && Connected) {
 | 
					                        if (!SerialNumber.empty() && Connected) {
 | 
				
			||||||
                            StorageService()->InventoryDB().CreateFromConnection(
 | 
					                            StorageService()->InventoryDB().CreateFromConnection(
 | 
				
			||||||
                                    SerialNumber, ConnectedIP, Compatible, Locale, isConnection);
 | 
					                                    SerialNumber, ConnectedIP, Compatible, Locale, isConnection);
 | 
				
			||||||
                            // Now that the entry has been created, we can try to push a config if
 | 
					 | 
				
			||||||
                            // the connection was a capabilities message.
 | 
					 | 
				
			||||||
                            if (isConnection){
 | 
					 | 
				
			||||||
                                ComputeAndPushConfig(SerialNumber, Compatible, Logger());
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
				} catch (const Poco::Exception &E) {
 | 
									} catch (const Poco::Exception &E) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,13 +14,28 @@
 | 
				
			|||||||
#include "RESTAPI/RESTAPI_db_helpers.h"
 | 
					#include "RESTAPI/RESTAPI_db_helpers.h"
 | 
				
			||||||
#include "SerialNumberCache.h"
 | 
					#include "SerialNumberCache.h"
 | 
				
			||||||
#include "StorageService.h"
 | 
					#include "StorageService.h"
 | 
				
			||||||
#include "Tasks/VenueConfigUpdater.h"
 | 
					 | 
				
			||||||
#include "framework/utils.h"
 | 
					#include "framework/utils.h"
 | 
				
			||||||
#include "sdks/SDK_gw.h"
 | 
					#include "sdks/SDK_gw.h"
 | 
				
			||||||
#include "sdks/SDK_sec.h"
 | 
					#include "sdks/SDK_sec.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace OpenWifi {
 | 
					namespace OpenWifi {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void GetRejectedLines(const Poco::JSON::Object::Ptr &Response, Types::StringVec &Warnings) {
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
								if (Response->has("results")) {
 | 
				
			||||||
 | 
									auto Results = Response->get("results").extract<Poco::JSON::Object::Ptr>();
 | 
				
			||||||
 | 
									auto Status = Results->get("status").extract<Poco::JSON::Object::Ptr>();
 | 
				
			||||||
 | 
									auto Rejected = Status->getArray("rejected");
 | 
				
			||||||
 | 
									std::transform(
 | 
				
			||||||
 | 
										Rejected->begin(), Rejected->end(), std::back_inserter(Warnings),
 | 
				
			||||||
 | 
										[](auto i) -> auto { return i.toString(); });
 | 
				
			||||||
 | 
									//                for(const auto &i:*Rejected)
 | 
				
			||||||
 | 
									//                  Warnings.push_back(i.toString());
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} catch (...) {
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void RESTAPI_inventory_handler::DoGet() {
 | 
						void RESTAPI_inventory_handler::DoGet() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ProvObjects::InventoryTag Existing;
 | 
							ProvObjects::InventoryTag Existing;
 | 
				
			||||||
@@ -299,8 +314,6 @@ namespace OpenWifi {
 | 
				
			|||||||
			return NotFound();
 | 
								return NotFound();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		std::string previous_venue = Existing.venue;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		auto RemoveSubscriber = GetParameter("removeSubscriber");
 | 
							auto RemoveSubscriber = GetParameter("removeSubscriber");
 | 
				
			||||||
		if (!RemoveSubscriber.empty()) {
 | 
							if (!RemoveSubscriber.empty()) {
 | 
				
			||||||
			if (Existing.subscriber == RemoveSubscriber) {
 | 
								if (Existing.subscriber == RemoveSubscriber) {
 | 
				
			||||||
@@ -458,13 +471,6 @@ namespace OpenWifi {
 | 
				
			|||||||
			SDK::GW::Device::SetOwnerShip(this, SerialNumber, Existing.entity, Existing.venue,
 | 
								SDK::GW::Device::SetOwnerShip(this, SerialNumber, Existing.entity, Existing.venue,
 | 
				
			||||||
										  Existing.subscriber);
 | 
															  Existing.subscriber);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Attempt an automatic config push when the venue is set and different than what is
 | 
					 | 
				
			||||||
			// in DB.
 | 
					 | 
				
			||||||
			poco_information(Logger(), fmt::format("New Venue {} Old Venue {}", NewObject.venue, previous_venue));
 | 
					 | 
				
			||||||
			if (!NewObject.venue.empty() && NewObject.venue != previous_venue) {
 | 
					 | 
				
			||||||
				ComputeAndPushConfig(SerialNumber, NewObject.deviceType, Logger());
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			ProvObjects::InventoryTag NewObjectCreated;
 | 
								ProvObjects::InventoryTag NewObjectCreated;
 | 
				
			||||||
			DB_.GetRecord("id", Existing.info.id, NewObjectCreated);
 | 
								DB_.GetRecord("id", Existing.info.id, NewObjectCreated);
 | 
				
			||||||
			Poco::JSON::Object Answer;
 | 
								Poco::JSON::Object Answer;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,42 +28,6 @@ namespace OpenWifi {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	[[maybe_unused]] static void ComputeAndPushConfig(const std::string &SerialNumber, const std::string &DeviceType, Poco::Logger &Logger) {
 | 
					 | 
				
			||||||
		/*
 | 
					 | 
				
			||||||
		Generic Helper to compute a device's config and push it down to the device.
 | 
					 | 
				
			||||||
		*/
 | 
					 | 
				
			||||||
		poco_information(Logger, fmt::format("Attempting to push venue config for device {}", SerialNumber));
 | 
					 | 
				
			||||||
		auto DeviceConfig = std::make_shared<APConfig>(SerialNumber,
 | 
					 | 
				
			||||||
														DeviceType, Logger, false);
 | 
					 | 
				
			||||||
		auto Configuration = Poco::makeShared<Poco::JSON::Object>();
 | 
					 | 
				
			||||||
		try {
 | 
					 | 
				
			||||||
			if (DeviceConfig->Get(Configuration)) {
 | 
					 | 
				
			||||||
				std::ostringstream OS;
 | 
					 | 
				
			||||||
				Configuration->stringify(OS);
 | 
					 | 
				
			||||||
				auto Response = Poco::makeShared<Poco::JSON::Object>();
 | 
					 | 
				
			||||||
				poco_debug(Logger,
 | 
					 | 
				
			||||||
							fmt::format("{}: Pushing configuration.", SerialNumber));
 | 
					 | 
				
			||||||
				if (SDK::GW::Device::Configure(nullptr, SerialNumber, Configuration,
 | 
					 | 
				
			||||||
												Response)) {
 | 
					 | 
				
			||||||
					Logger.debug(
 | 
					 | 
				
			||||||
						fmt::format("{}: Configuration pushed.", SerialNumber));
 | 
					 | 
				
			||||||
					poco_information(Logger,
 | 
					 | 
				
			||||||
										fmt::format("{}: Updated.", SerialNumber));
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					poco_information(Logger,
 | 
					 | 
				
			||||||
										fmt::format("{}: Not updated.", SerialNumber));
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			} else {
 | 
					 | 
				
			||||||
				poco_debug(Logger,
 | 
					 | 
				
			||||||
							fmt::format("{}: Configuration is bad.", SerialNumber));
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		} catch (...) {
 | 
					 | 
				
			||||||
			poco_debug(Logger,
 | 
					 | 
				
			||||||
						fmt::format("{}: Configuration is bad (caused an exception).",
 | 
					 | 
				
			||||||
									SerialNumber));
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	class VenueDeviceConfigUpdater : public Poco::Runnable {
 | 
						class VenueDeviceConfigUpdater : public Poco::Runnable {
 | 
				
			||||||
	  public:
 | 
						  public:
 | 
				
			||||||
		VenueDeviceConfigUpdater(const std::string &UUID, const std::string &venue, Poco::Logger &L)
 | 
							VenueDeviceConfigUpdater(const std::string &UUID, const std::string &venue, Poco::Logger &L)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,9 +67,9 @@ namespace OpenWifi {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        bool Get(const char *key, std::vector<std::string> &Value) {
 | 
					        bool Get(const char *key, std::vector<std::string> &Value) {
 | 
				
			||||||
            if(Registry_->has(key) && !Registry_->isNull(key) && Registry_->isArray(key)) {
 | 
					            if(Registry_->has(key) && !Registry_->isNull(key) && Registry_->isArray(key)) {
 | 
				
			||||||
                auto pArr = Registry_->getArray(key);
 | 
					                auto Arr = Registry_->get(key);
 | 
				
			||||||
                for(const auto &v : *pArr) {
 | 
					                for(const auto &v:Arr) {
 | 
				
			||||||
                    Value.emplace_back(v.toString());
 | 
					                    Value.emplace_back(v);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                return true;
 | 
					                return true;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -118,10 +118,6 @@ namespace OpenWifi {
 | 
				
			|||||||
						Producer.poll((std::chrono::milliseconds) 0);
 | 
											Producer.poll((std::chrono::milliseconds) 0);
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
		                if (Queue_.size() == 0) {
 | 
					 | 
				
			||||||
					// message queue is empty, flush all previously sent messages
 | 
					 | 
				
			||||||
					Producer.flush();
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			} catch (const cppkafka::HandleException &E) {
 | 
								} catch (const cppkafka::HandleException &E) {
 | 
				
			||||||
				poco_warning(Logger_,
 | 
									poco_warning(Logger_,
 | 
				
			||||||
							 fmt::format("Caught a Kafka exception (producer): {}", E.what()));
 | 
												 fmt::format("Caught a Kafka exception (producer): {}", E.what()));
 | 
				
			||||||
@@ -130,6 +126,10 @@ namespace OpenWifi {
 | 
				
			|||||||
			} catch (...) {
 | 
								} catch (...) {
 | 
				
			||||||
				poco_error(Logger_, "std::exception");
 | 
									poco_error(Logger_, "std::exception");
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								if (Queue_.size() == 0) {
 | 
				
			||||||
 | 
									// message queue is empty, flush all previously sent messages
 | 
				
			||||||
 | 
									Producer.flush();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			Note = Queue_.waitDequeueNotification();
 | 
								Note = Queue_.waitDequeueNotification();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		Producer.flush();
 | 
							Producer.flush();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user