mirror of
https://github.com/Telecominfraproject/wlan-cloud-ucentralfms.git
synced 2025-10-30 02:12:22 +00:00
Reword with microservice arch.
This commit is contained in:
@@ -75,7 +75,7 @@ add_executable( ucentralfms
|
||||
src/RESTAPI_utils.cpp src/RESTAPI_utils.h
|
||||
src/RESTAPI_FMSObjects.cpp src/RESTAPI_FMSObjects.h
|
||||
src/storage_firmwares.h src/storage_history.cpp
|
||||
src/storage_history.h src/storage_deviceTypes.cpp src/storage_deviceTypes.h src/RESTAPI_historyHandler.cpp src/RESTAPI_historyHandler.h src/NewConnectionHandler.cpp src/NewConnectionHandler.h src/LatestFirmwareCache.cpp src/LatestFirmwareCache.h)
|
||||
src/storage_history.h src/storage_deviceTypes.cpp src/storage_deviceTypes.h src/RESTAPI_historyHandler.cpp src/RESTAPI_historyHandler.h src/NewConnectionHandler.cpp src/NewConnectionHandler.h src/LatestFirmwareCache.cpp src/LatestFirmwareCache.h src/DeviceCache.cpp src/DeviceCache.h)
|
||||
|
||||
target_link_libraries(ucentralfms PUBLIC
|
||||
${Poco_LIBRARIES} ${MySQL_LIBRARIES}
|
||||
|
||||
@@ -125,39 +125,6 @@ components:
|
||||
items:
|
||||
$ref: '#/components/schemas/FirmwareDetails'
|
||||
|
||||
DeviceType:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
format: uuid
|
||||
deviceType:
|
||||
type: string
|
||||
manufacturer:
|
||||
type: string
|
||||
model:
|
||||
type: string
|
||||
policy:
|
||||
type: string
|
||||
notes:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/NoteInfo'
|
||||
lastUpdate:
|
||||
type: integer
|
||||
format: int64
|
||||
created:
|
||||
type: integer
|
||||
format: int64
|
||||
|
||||
DeviceTypeList:
|
||||
type: object
|
||||
properties:
|
||||
deviceTypes:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/DeviceType'
|
||||
|
||||
RevisionHistoryEntry:
|
||||
type: object
|
||||
properties:
|
||||
@@ -423,122 +390,6 @@ paths:
|
||||
404:
|
||||
$ref: '#/components/responses/NotFound'
|
||||
|
||||
/deviceTypes:
|
||||
get:
|
||||
tags:
|
||||
- DeviceTypes
|
||||
summary: List all the defined device types
|
||||
operationId: getDeviceTypes
|
||||
parameters:
|
||||
- in: query
|
||||
description: Pagination start (starts at 1. If not specified, 1 is assumed)
|
||||
name: offset
|
||||
schema:
|
||||
type: integer
|
||||
required: false
|
||||
- in: query
|
||||
description: Maximum number of entries to return (if absent, no limit is assumed)
|
||||
name: limit
|
||||
schema:
|
||||
type: integer
|
||||
required: false
|
||||
- in: query
|
||||
description: Filter the results
|
||||
name: filter
|
||||
schema:
|
||||
type: string
|
||||
required: false
|
||||
responses:
|
||||
200:
|
||||
description: List of known device types.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/DeviceTypeList'
|
||||
403:
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
404:
|
||||
$ref: '#/components/responses/NotFound'
|
||||
|
||||
/deviceType/{id}:
|
||||
get:
|
||||
tags:
|
||||
- DeviceTypes
|
||||
summary: Get a specific DeviceType
|
||||
operationId: getDeviceType
|
||||
parameters:
|
||||
- in: path
|
||||
description: ID of deviceType to retrieve
|
||||
name: id
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
required: true
|
||||
responses:
|
||||
200:
|
||||
description: Get a single device type.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/DeviceType'
|
||||
403:
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
404:
|
||||
$ref: '#/components/responses/NotFound'
|
||||
|
||||
delete:
|
||||
tags:
|
||||
- DeviceTypes
|
||||
summary: Delete a specific DeviceType
|
||||
operationId: deleteDeviceType
|
||||
parameters:
|
||||
- in: path
|
||||
description: ID of deviceType to retrieve
|
||||
name: id
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
required: true
|
||||
responses:
|
||||
200:
|
||||
$ref: '#/components/responses/Success'
|
||||
403:
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
404:
|
||||
$ref: '#/components/responses/NotFound'
|
||||
|
||||
put:
|
||||
tags:
|
||||
- DeviceTypes
|
||||
summary: Modify a specific DeviceType
|
||||
operationId: modifyDeviceType
|
||||
parameters:
|
||||
- in: path
|
||||
description: ID of deviceType to modify
|
||||
name: id
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
required: true
|
||||
requestBody:
|
||||
description: Modifications for the DeviceType
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/DeviceType'
|
||||
responses:
|
||||
200:
|
||||
description: Get a single device type.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/DeviceType'
|
||||
403:
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
404:
|
||||
$ref: '#/components/responses/NotFound'
|
||||
|
||||
/revisionHistory/{serialNumber}:
|
||||
get:
|
||||
tags:
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "KafkaManager.h"
|
||||
#include "NewConnectionHandler.h"
|
||||
#include "LatestFirmwareCache.h"
|
||||
#include "DeviceCache.h"
|
||||
|
||||
namespace uCentral {
|
||||
class Daemon *Daemon::instance_ = nullptr;
|
||||
@@ -37,6 +38,7 @@ namespace uCentral {
|
||||
vDAEMON_BUS_TIMER,
|
||||
Types::SubSystemVec{Storage(),
|
||||
LatestFirmwareCache(),
|
||||
DeviceCache(),
|
||||
NewConnectionHandler(),
|
||||
RESTAPI_server(),
|
||||
RESTAPI_InternalServer(),
|
||||
|
||||
28
src/DeviceCache.cpp
Normal file
28
src/DeviceCache.cpp
Normal file
@@ -0,0 +1,28 @@
|
||||
//
|
||||
// Created by stephane bourque on 2021-07-13.
|
||||
//
|
||||
|
||||
#include "DeviceCache.h"
|
||||
|
||||
namespace uCentral {
|
||||
class DeviceCache *DeviceCache::instance_ = nullptr;
|
||||
|
||||
int DeviceCache::Start() {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DeviceCache::Stop() {
|
||||
|
||||
}
|
||||
|
||||
void DeviceCache::AddToCache(
|
||||
const std::string &serialNumber, const std::string & DeviceType,
|
||||
const std::string &Host, const std::string &Firmware) {
|
||||
|
||||
}
|
||||
|
||||
void DeviceCache::DumpCache() {
|
||||
|
||||
}
|
||||
}
|
||||
52
src/DeviceCache.h
Normal file
52
src/DeviceCache.h
Normal file
@@ -0,0 +1,52 @@
|
||||
//
|
||||
// Created by stephane bourque on 2021-07-13.
|
||||
//
|
||||
|
||||
#ifndef UCENTRALFMS_DEVICECACHE_H
|
||||
#define UCENTRALFMS_DEVICECACHE_H
|
||||
|
||||
#include <string>
|
||||
#include "SubSystemServer.h"
|
||||
#include "uCentralTypes.h"
|
||||
|
||||
namespace uCentral {
|
||||
|
||||
struct DeviceCacheEntry {
|
||||
std::string compatible;
|
||||
std::string host;
|
||||
std::string firmware;
|
||||
};
|
||||
typedef std::map<std::string, DeviceCacheEntry> DeviceCacheMap;
|
||||
|
||||
class DeviceCache : public SubSystemServer {
|
||||
public:
|
||||
static DeviceCache *instance() {
|
||||
if (instance_ == nullptr) {
|
||||
instance_ = new DeviceCache;
|
||||
}
|
||||
return instance_;
|
||||
}
|
||||
|
||||
int Start() override;
|
||||
void Stop() override;
|
||||
void AddToCache(const std::string &serialNumber, const std::string & DeviceType,
|
||||
const std::string &Host, const std::string &Firmware);
|
||||
std::string FindLatestFirmware(std::string &DeviceType);
|
||||
void DumpCache();
|
||||
|
||||
private:
|
||||
static DeviceCache *instance_;
|
||||
std::atomic_bool Running_=false;
|
||||
DeviceCacheMap DeviceCache_;
|
||||
explicit DeviceCache() noexcept:
|
||||
SubSystemServer("DeviceCache", "DEVICE-CACHE", "devicecache")
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
inline DeviceCache * DeviceCache() { return DeviceCache::instance(); }
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif //UCENTRALFMS_DEVICECACHE_H
|
||||
@@ -23,19 +23,17 @@ namespace uCentral {
|
||||
Running_ = true;
|
||||
|
||||
while(Running_) {
|
||||
Poco::Thread::trySleep(10000);
|
||||
Poco::Thread::trySleep(DBRefresh_*1000);
|
||||
if(!Running_)
|
||||
break;
|
||||
std::cout << "About to read bucket..." << std::endl;
|
||||
Logger_.information("Performing DB refresh");
|
||||
S3BucketContent BucketList;
|
||||
ReadBucket(BucketList);
|
||||
if(!Running_)
|
||||
break;
|
||||
std::cout << "Bucket read: " << BucketList.size() << std::endl;
|
||||
Logger_.information(Poco::format("Found %Lu entries in S# repository for firmware.",(uint64_t)BucketList.size()));
|
||||
ComputeManifest(BucketList);
|
||||
AddManifestToDB(BucketList);
|
||||
// LatestFirmwareCache()->DumpCache();
|
||||
// Print(BucketList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,9 +85,8 @@ namespace uCentral {
|
||||
F.revision = BucketEntry.Revision;
|
||||
F.deviceType = BucketEntry.Compatible;
|
||||
if(Storage()->AddFirmware(F)) {
|
||||
std::cout << "Adding " << Release << std::endl;
|
||||
Logger_.information(Poco::format("Adding firmware '%'",Release));
|
||||
} else {
|
||||
std::cout << "Could not add firmware..." << Release << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -103,6 +100,8 @@ namespace uCentral {
|
||||
S3Key_ = Daemon()->ConfigGetString("s3.key");
|
||||
S3Retry_ = Daemon()->ConfigGetInt("s3.retry",60);
|
||||
|
||||
DBRefresh_ = Daemon()->ConfigGetInt("firmwaredb.refresh",30*60);
|
||||
|
||||
AwsConfig_.enableTcpKeepAlive = true;
|
||||
AwsConfig_.enableEndpointDiscovery = true;
|
||||
AwsConfig_.useDualStack = true;
|
||||
@@ -167,13 +166,9 @@ namespace uCentral {
|
||||
auto Outcome = S3Client.ListObjects(Request);
|
||||
|
||||
if(Outcome.IsSuccess()) {
|
||||
// std::cout << "Success..." << std::endl;
|
||||
// std::cout << "Objects: ." ;
|
||||
Aws::Vector<Aws::S3::Model::Object> objects = Outcome.GetResult().GetContents();
|
||||
for (const auto &Object : objects) {
|
||||
Poco::Path FileName(Object.GetKey().c_str());
|
||||
// std::cout << "Object: " << Object.GetKey() << std::endl;
|
||||
// std::cout << "." << std::flush;
|
||||
if(!Running_)
|
||||
return false;
|
||||
if (FileName.getExtension() == "json") {
|
||||
|
||||
@@ -64,6 +64,7 @@ namespace uCentral {
|
||||
uint64_t S3Retry_;
|
||||
Aws::Client::ClientConfiguration AwsConfig_{"ARILIA"};
|
||||
Aws::Auth::AWSCredentials AwsCreds_;
|
||||
uint64_t DBRefresh_ = 30 * 60;
|
||||
|
||||
ManifestCreator() noexcept:
|
||||
SubSystemServer("ManifestCreator", "MANIFEST-MGR", "manifestcreator") {
|
||||
|
||||
@@ -33,7 +33,6 @@ namespace uCentral {
|
||||
if(!Running_)
|
||||
break;
|
||||
|
||||
std::cout << "New connection..." << std::endl;
|
||||
Types::StringPair S;
|
||||
{
|
||||
SubMutexGuard G(Mutex_);
|
||||
@@ -41,22 +40,18 @@ namespace uCentral {
|
||||
NewConnections_.pop();
|
||||
}
|
||||
auto SerialNumber = S.first;
|
||||
|
||||
std::cout << "Connection data:" << S.second << std::endl;
|
||||
|
||||
Poco::JSON::Parser Parser;
|
||||
auto Object = Parser.parse(S.second).extract<Poco::JSON::Object::Ptr>();
|
||||
|
||||
std::string compatible, serialNumber, firmware;
|
||||
if(Object->has("payload")) {
|
||||
std::cout << __LINE__ << std::endl;
|
||||
auto PayloadObj = Object->getObject("payload");
|
||||
std::cout << __LINE__ << std::endl;
|
||||
if(PayloadObj->has("capabilities")) {
|
||||
std::cout << __LINE__ << std::endl;
|
||||
auto CapObj = PayloadObj->getObject("capabilities");
|
||||
std::cout << __LINE__ << std::endl;
|
||||
if(CapObj->has("compatible")) {
|
||||
std::cout << __LINE__ << std::endl;
|
||||
compatible = CapObj->get("compatible").toString();
|
||||
serialNumber = PayloadObj->get("serial").toString();
|
||||
firmware = PayloadObj->get("firmware").toString();
|
||||
std::cout << "Compatible: " << CapObj->get("compatible").toString() << std::endl;
|
||||
}
|
||||
}
|
||||
@@ -87,6 +82,5 @@ namespace uCentral {
|
||||
void NewConnectionHandler::ConnectionReceived( const std::string & Key, const std::string & Message) {
|
||||
SubMutexGuard G(Mutex_);
|
||||
NewConnections_.push(std::make_pair(Key,Message));
|
||||
std::cout << "New connection..." << std::endl;
|
||||
}
|
||||
}
|
||||
@@ -45,6 +45,7 @@ s3.key = **************************
|
||||
s3.retry = 60
|
||||
s3.bucket.uri = ucentral-ap-firmware.s3.amazonaws.com
|
||||
|
||||
firmwaredb.refresh = 1800
|
||||
#############################
|
||||
# Generic information for all micro services
|
||||
#############################
|
||||
|
||||
Reference in New Issue
Block a user