Skip to content

Commit 8371c25

Browse files
adrianM27goruklu
authored andcommitted
RDK-53686 Analytics sysTime validation, generate sessionId and attributes source alignment
1 parent 9bdb752 commit 8371c25

22 files changed

+795
-232
lines changed

Analytics/Analytics.conf.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ if boolean("@PLUGIN_ANALYTICS_SIFT_BACKEND_ENABLED@"):
1515
sift.add("productname", "@PLUGIN_ANALYTICS_SIFT_PRODUCT_NAME@")
1616
sift.add("loggername", "@PLUGIN_ANALYTICS_SIFT_LOGGER_NAME@")
1717
sift.add("loggerversion", "@PLUGIN_ANALYTICS_SIFT_LOGGER_VERSION@")
18+
sift.add("platformdefault", "@PLUGIN_ANALYTICS_SIFT_PLATFORM_DEFAULT@")
1819
sift.add("maxrandomisationwindowtime", "@PLUGIN_ANALYTICS_SIFT_MAX_RANDOMISATION_WINDOW_TIME@")
1920
sift.add("maxeventsinpost", "@PLUGIN_ANALYTICS_SIFT_MAX_EVENTS_IN_POST@")
2021
sift.add("maxretries", "@PLUGIN_ANALYTICS_SIFT_MAX_RETRIES@")

Analytics/Analytics.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ if(PLUGIN_ANALYTICS_SIFT_BACKEND_ENABLED)
2020
kv(productname ${PLUGIN_ANALYTICS_SIFT_PRODUCT_NAME})
2121
kv(loggername ${PLUGIN_ANALYTICS_SIFT_LOGGER_NAME})
2222
kv(loggerversion ${PLUGIN_ANALYTICS_SIFT_LOGGER_VERSION})
23+
kv(platformdefault ${PLUGIN_ANALYTICS_SIFT_PLATFORM_DEFAULT})
2324
kv(maxrandomisationwindowtime, ${PLUGIN_ANALYTICS_SIFT_MAX_RANDOMISATION_WINDOW_TIME})
2425
kv(maxeventsinpost, ${PLUGIN_ANALYTICS_SIFT_MAX_EVENTS_IN_POST})
2526
kv(maxretries, ${PLUGIN_ANALYTICS_SIFT_MAX_RETRIES})

Analytics/Analytics.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ namespace WPEFramework {
6868
END_INTERFACE_MAP
6969

7070
static const string ANALYTICS_METHOD_SEND_EVENT;
71-
static const string ANALYTICS_METHOD_SET_SESSION_ID;
72-
static const string ANALYTICS_METHOD_SET_TIME_READY;
7371

7472
private:
7573
void Deactivated(RPC::IRemoteConnection* connection);
@@ -78,8 +76,6 @@ namespace WPEFramework {
7876
void UnregisterAll();
7977

8078
uint32_t SendEventWrapper(const JsonObject& parameters, JsonObject& response);
81-
uint32_t SetSessionIdWrapper(const JsonObject& parameters, JsonObject& response);
82-
uint32_t SetTimeReadyWrapper(const JsonObject& parameters, JsonObject& response);
8379

8480
private:
8581
PluginHost::IShell* mService;

Analytics/AnalyticsJsonRpc.cpp

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@
2121
#include "UtilsJsonRpc.h"
2222

2323
const string WPEFramework::Plugin::Analytics::ANALYTICS_METHOD_SEND_EVENT = "sendEvent";
24-
// TODO: To be removed once the Analytics is capable of handling it internally
25-
const string WPEFramework::Plugin::Analytics::ANALYTICS_METHOD_SET_SESSION_ID = "setSessionId";
26-
const string WPEFramework::Plugin::Analytics::ANALYTICS_METHOD_SET_TIME_READY = "setTimeReady";
2724

2825
namespace WPEFramework {
2926

@@ -34,15 +31,11 @@ namespace Plugin {
3431
void Analytics::RegisterAll()
3532
{
3633
Register(_T(ANALYTICS_METHOD_SEND_EVENT), &Analytics::SendEventWrapper, this);
37-
Register(_T(ANALYTICS_METHOD_SET_SESSION_ID), &Analytics::SetSessionIdWrapper, this);
38-
Register(_T(ANALYTICS_METHOD_SET_TIME_READY), &Analytics::SetTimeReadyWrapper, this);
3934
}
4035

4136
void Analytics::UnregisterAll()
4237
{
4338
Unregister(_T(ANALYTICS_METHOD_SEND_EVENT));
44-
Unregister(_T(ANALYTICS_METHOD_SET_SESSION_ID));
45-
Unregister(_T(ANALYTICS_METHOD_SET_TIME_READY));
4639
}
4740

4841
// API implementation
@@ -93,44 +86,6 @@ namespace Plugin {
9386
returnResponse(result == Core::ERROR_NONE);
9487
}
9588

96-
// Method: setSessionId - Set the session ID
97-
// Return codes:
98-
// - ERROR_NONE: Success
99-
// - ERROR_GENERAL: Failed to set the session ID
100-
uint32_t Analytics::SetSessionIdWrapper(const JsonObject& parameters, JsonObject& response)
101-
{
102-
LOGINFOMETHOD();
103-
104-
uint32_t result = Core::ERROR_NONE;
105-
106-
returnIfStringParamNotFound(parameters, "sessionId");
107-
108-
string sessionId = parameters["sessionId"].String();
109-
110-
if (mAnalytics != nullptr) {
111-
result = mAnalytics->SetSessionId(sessionId);
112-
}
113-
114-
returnResponse(result == Core::ERROR_NONE);
115-
}
116-
117-
// Method: setTimeReady - Set the time ready
118-
// Return codes:
119-
// - ERROR_NONE: Success
120-
// - ERROR_GENERAL: Failed to set the time ready
121-
uint32_t Analytics::SetTimeReadyWrapper(const JsonObject& parameters, JsonObject& response)
122-
{
123-
LOGINFOMETHOD();
124-
125-
uint32_t result = Core::ERROR_NONE;
126-
127-
if (mAnalytics != nullptr) {
128-
result = mAnalytics->SetTimeReady();
129-
}
130-
131-
returnResponse(result == Core::ERROR_NONE);
132-
}
133-
13489
}
13590

13691
}

Analytics/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ All notable changes to this RDK Service will be documented in this file.
1414

1515
For more details, refer to versioning section under Main README.
1616

17+
## [1.0.1] - 2024-10-16
18+
- Support generation of sessionID, SysTime validation and limit nbr of external attributes for Sift
19+
1720
## [1.0.0] - 2024-07-25
1821
### Added
1922
- New RDK Service Analytics to handle analytics events and send them to dedicated backends

Analytics/CMakeLists.txt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ set(MODULE_NAME ${NAMESPACE}${PLUGIN_NAME})
2020

2121
set(VERSION_MAJOR 1)
2222
set(VERSION_MINOR 0)
23-
set(VERSION_PATCH 0)
23+
set(VERSION_PATCH 1)
2424

2525
add_compile_definitions(ANALYTICS_MAJOR_VERSION=${VERSION_MAJOR})
2626
add_compile_definitions(ANALYTICS_MINOR_VERSION=${VERSION_MINOR})
@@ -42,13 +42,14 @@ set(PLUGIN_ANALYTICS_SIFT_ENV "prod" CACHE STRING "Sift environment")
4242
set(PLUGIN_ANALYTICS_SIFT_PRODUCT_NAME "entos" CACHE STRING "Sift product name") #entos-immerse in Sift2.0
4343
set(PLUGIN_ANALYTICS_SIFT_LOGGER_NAME "Analytics" CACHE STRING "Sift logger name")
4444
set(PLUGIN_ANALYTICS_SIFT_LOGGER_VERSION "${MODULE_VERSION}" CACHE STRING "Sift logger version")
45+
set(PLUGIN_ANALYTICS_SIFT_PLATFORM_DEFAULT "entos:rdk" CACHE STRING "Sift platform default value")
4546
set(PLUGIN_ANALYTICS_SIFT_MAX_RANDOMISATION_WINDOW_TIME 300 CACHE STRING "Sift max randomisation window time of posting queued events")
4647
set(PLUGIN_ANALYTICS_SIFT_MAX_EVENTS_IN_POST 10 CACHE STRING "Sift max events in post")
4748
set(PLUGIN_ANALYTICS_SIFT_MAX_RETRIES 10 CACHE STRING "Sift max retries posting events")
4849
set(PLUGIN_ANALYTICS_SIFT_MIN_RETRY_PERIOD 1 CACHE STRING "Sift min retry period seconds")
4950
set(PLUGIN_ANALYTICS_SIFT_MAX_RETRY_PERIOD 30 CACHE STRING "Sift max retry period seconds")
5051
set(PLUGIN_ANALYTICS_SIFT_EXPONENTIAL_PERIODIC_FACTOR 2 CACHE STRING "Sift exponential periodic factor")
51-
set(PLUGIN_ANALYTICS_SIFT_STORE_PATH "/opt/persistent/sky/AnalyticsSiftStore" CACHE STRING "Sift store path")
52+
set(PLUGIN_ANALYTICS_SIFT_STORE_PATH "/persistent/AnalyticsSiftStore" CACHE STRING "Sift store path")
5253
set(PLUGIN_ANALYTICS_SIFT_STORE_EVENTS_LIMIT 1000 CACHE STRING "Sift store events limit")
5354
set(PLUGIN_ANALYTICS_SIFT_URL "" CACHE STRING "Sift URL")
5455

@@ -67,8 +68,11 @@ add_library(${MODULE_NAME} SHARED
6768
Module.cpp)
6869

6970
target_include_directories(${MODULE_NAME} PRIVATE Implementation)
71+
target_include_directories(${MODULE_NAME} PRIVATE Implementation/SystemTime)
72+
target_include_directories(${MODULE_NAME} PRIVATE ../)
7073
target_include_directories(${MODULE_NAME} PRIVATE ../helpers)
7174

75+
add_subdirectory(Implementation/SystemTime)
7276
add_subdirectory(Implementation/LocalStore)
7377
add_subdirectory(Implementation/Backend)
7478

@@ -85,7 +89,8 @@ target_link_libraries(${MODULE_NAME}
8589
${NAMESPACE}Definitions::${NAMESPACE}Definitions
8690
${DS_LIBRARIES}
8791
${IARMBUS_LIBRARIES}
88-
${MODULE_NAME}Backends)
92+
${MODULE_NAME}Backends
93+
${MODULE_NAME}SystemTime)
8994

9095
install(TARGETS ${MODULE_NAME}
9196
DESTINATION lib/${STORAGE_DIRECTORY}/plugins)

Analytics/Implementation/AnalyticsImplementation.cpp

Lines changed: 21 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "AnalyticsImplementation.h"
2020
#include "Backend/AnalyticsBackend.h"
2121
#include "UtilsLogging.h"
22+
#include "SystemTime.h"
2223

2324
#include <fstream>
2425
#include <streambuf>
@@ -36,7 +37,7 @@ namespace Plugin {
3637
mQueueCondition(),
3738
mActionQueue(),
3839
mEventQueue(),
39-
mBackends(IAnalyticsBackendAdministrator::Instances()),
40+
mBackends(IAnalyticsBackendAdministrator::Create()),
4041
mSysTimeValid(false),
4142
mShell(nullptr)
4243
{
@@ -45,20 +46,21 @@ namespace Plugin {
4546

4647
AnalyticsImplementation::~AnalyticsImplementation()
4748
{
49+
LOGINFO("AnalyticsImplementation::~AnalyticsImplementation()");
4850
std::unique_lock<std::mutex> lock(mQueueMutex);
4951
mActionQueue.push({ACTION_TYPE_SHUTDOWN, nullptr});
5052
lock.unlock();
5153
mQueueCondition.notify_one();
5254
mThread.join();
5355
}
5456

55-
/* virtual */ uint32_t AnalyticsImplementation::SendEvent(const string& eventName,
57+
/* virtual */ Core::hresult AnalyticsImplementation::SendEvent(const string& eventName,
5658
const string& eventVersion,
5759
const string& eventSource,
5860
const string& eventSourceVersion,
59-
RPC::IStringIterator* const& cetList,
60-
const uint64_t& epochTimestamp,
61-
const uint64_t& uptimeTimestamp,
61+
IStringIterator* const& cetList,
62+
const uint64_t epochTimestamp,
63+
const uint64_t uptimeTimestamp,
6264
const string& eventPayload)
6365
{
6466
std::shared_ptr<Event> event = std::make_shared<Event>();
@@ -98,39 +100,23 @@ namespace Plugin {
98100
return Core::ERROR_NONE;
99101
}
100102

101-
uint32_t AnalyticsImplementation::SetSessionId(const string& id)
102-
{
103-
uint32_t ret = Core::ERROR_GENERAL;
104-
// set session id in sift backend
105-
if (mBackends.find(IAnalyticsBackend::SIFT) != mBackends.end())
106-
{
107-
ret = mBackends.at(IAnalyticsBackend::SIFT).SetSessionId(id);
108-
}
109-
110-
return ret;
111-
}
112-
113-
uint32_t AnalyticsImplementation::SetTimeReady()
114-
{
115-
// set time ready action
116-
std::unique_lock<std::mutex> lock(mQueueMutex);
117-
mActionQueue.push({ACTION_TYPE_SET_TIME_READY, nullptr});
118-
lock.unlock();
119-
mQueueCondition.notify_one();
120-
return Core::ERROR_NONE;
121-
}
122-
123103
uint32_t AnalyticsImplementation::Configure(PluginHost::IShell* shell)
124104
{
125105
LOGINFO("Configuring Analytics");
126106
uint32_t result = Core::ERROR_NONE;
127107
ASSERT(shell != nullptr);
128108
mShell = shell;
129109

110+
mSysTime = std::make_shared<SystemTime>(shell);
111+
if(mSysTime == nullptr)
112+
{
113+
LOGERR("Failed to create SystemTime instance");
114+
}
115+
130116
for (auto &backend : mBackends)
131117
{
132118
LOGINFO("Configuring backend: %s", backend.first.c_str());
133-
backend.second.Configure(shell);
119+
backend.second->Configure(shell, mSysTime);
134120
}
135121

136122
return result;
@@ -177,7 +163,7 @@ namespace Plugin {
177163
switch (action.type) {
178164
case ACTION_POPULATE_TIME_INFO:
179165

180-
//mSysTimeValid = IsSysTimeValid();
166+
mSysTimeValid = IsSysTimeValid();
181167

182168
if ( mSysTimeValid )
183169
{
@@ -225,24 +211,8 @@ namespace Plugin {
225211
}
226212
break;
227213
case ACTION_TYPE_SHUTDOWN:
214+
LOGINFO("Shutting down Analytics");
228215
return;
229-
case ACTION_TYPE_SET_TIME_READY:
230-
{
231-
mSysTimeValid = true;
232-
// Send the events from the queue, if there are any.
233-
while ( !mEventQueue.empty() )
234-
{
235-
AnalyticsImplementation::Event event = mEventQueue.front();
236-
// convert uptime to epoch timestamp
237-
if (event.epochTimestamp == 0)
238-
{
239-
event.epochTimestamp = ConvertUptimeToTimestampInMs(event.uptimeTimestamp);
240-
}
241-
242-
SendEventToBackend( event );
243-
mEventQueue.pop();
244-
}
245-
}break;
246216
default:
247217
break;
248218
}
@@ -254,8 +224,10 @@ namespace Plugin {
254224
bool AnalyticsImplementation::IsSysTimeValid()
255225
{
256226
bool ret = false;
257-
//TODO: Add system time validationm
258-
// For now, relay on setTimeReady call
227+
if (mSysTime != nullptr)
228+
{
229+
ret = mSysTime->IsSystemTimeAvailable();
230+
}
259231

260232
return ret;
261233
}
@@ -279,7 +251,7 @@ namespace Plugin {
279251
else if (mBackends.find(IAnalyticsBackend::SIFT) != mBackends.end())
280252
{
281253
LOGINFO("Sending event to Sift backend: %s", event.eventName.c_str());
282-
mBackends.at(IAnalyticsBackend::SIFT).SendEvent(backendEvent);
254+
mBackends.at(IAnalyticsBackend::SIFT)->SendEvent(backendEvent);
283255
}
284256
}
285257

Analytics/Implementation/AnalyticsImplementation.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <interfaces/IAnalytics.h>
2323
#include <interfaces/IConfiguration.h>
2424
#include "Backend/AnalyticsBackend.h"
25+
#include "SystemTime.h"
2526

2627
#include <mutex>
2728
#include <condition_variable>
@@ -76,16 +77,14 @@ namespace Plugin {
7677

7778

7879
// IAnalyticsImplementation interface
79-
uint32_t SendEvent(const string& eventName,
80+
Core::hresult SendEvent(const string& eventName,
8081
const string& eventVersion,
8182
const string& eventSource,
8283
const string& eventSourceVersion,
83-
RPC::IStringIterator* const& cetList,
84-
const uint64_t& epochTimestamp,
85-
const uint64_t& uptimeTimestamp,
84+
IStringIterator* const& cetList,
85+
const uint64_t epochTimestamp,
86+
const uint64_t uptimeTimestamp,
8687
const string& eventPayload) override;
87-
uint32_t SetSessionId(const string& id) override;
88-
uint32_t SetTimeReady() override;
8988

9089

9190
// IConfiguration interface
@@ -107,6 +106,7 @@ namespace Plugin {
107106
const IAnalyticsBackends mBackends;
108107
bool mSysTimeValid;
109108
PluginHost::IShell* mShell;
109+
SystemTimePtr mSysTime;
110110
};
111111
}
112112
}

Analytics/Implementation/Backend/AnalyticsBackend.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,11 @@ namespace Plugin {
2727

2828
const std::string IAnalyticsBackend::SIFT = "Sift";
2929

30-
IAnalyticsBackends& IAnalyticsBackendAdministrator::Instances()
30+
IAnalyticsBackends IAnalyticsBackendAdministrator::Create()
3131
{
32-
static SiftBackend siftBackend;
33-
static IAnalyticsBackends backendInstances = {
32+
IAnalyticsBackends backendInstances = {
3433
#ifdef ANALYTICS_SIFT_BACKEND
35-
{IAnalyticsBackend::SIFT, siftBackend},
34+
{IAnalyticsBackend::SIFT, std::make_shared<SiftBackend>()},
3635
#endif
3736
};
3837
return (backendInstances);

Analytics/Implementation/Backend/AnalyticsBackend.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <map>
2222
#include <string>
2323
#include "../../Module.h"
24+
#include "../SystemTime/SystemTime.h"
2425

2526
// Interface for Analytics Backedn
2627
namespace WPEFramework {
@@ -42,15 +43,16 @@ namespace Plugin {
4243

4344
const static std::string SIFT;
4445

45-
virtual uint32_t Configure(PluginHost::IShell* shell) = 0;
46+
virtual uint32_t Configure(PluginHost::IShell* shell, SystemTimePtr sysTime) = 0;
4647
virtual uint32_t SendEvent(const Event& event) = 0;
47-
virtual uint32_t SetSessionId(const std::string& sessionId) = 0;
4848
};
4949

50-
typedef std::map<std::string, IAnalyticsBackend&> IAnalyticsBackends;
50+
typedef std::shared_ptr<IAnalyticsBackend> IAnalyticsBackendPtr;
51+
52+
typedef std::map<std::string, IAnalyticsBackendPtr> IAnalyticsBackends;
5153

5254
struct IAnalyticsBackendAdministrator {
53-
static IAnalyticsBackends& Instances();
55+
static IAnalyticsBackends Create();
5456

5557
virtual ~IAnalyticsBackendAdministrator() = default;
5658
};

0 commit comments

Comments
 (0)