ajout compter les utilisateurs actifs et nouveaux par jour

This commit is contained in:
2025-10-17 02:20:04 +02:00
parent 13ff660175
commit 2191a940c4
3 changed files with 46 additions and 16 deletions

5
.gitignore vendored
View File

@@ -1,2 +1,5 @@
.vscode
build
build
.DS_Store
uwu2x-large.sql
uwu2x-large.db

View File

@@ -28,7 +28,7 @@ FetchContent_MakeAvailable(sqlite3pp)
file(GLOB SOURCES src/*.cpp)
add_executable(${PROJECT_NAME} ${SOURCES})
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 14)
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 17)
target_include_directories(${PROJECT_NAME} PUBLIC
include
${sqlite3pp_SOURCE_DIR}/headeronly_src

View File

@@ -1,33 +1,60 @@
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <chrono>
#include "sqlite3pp.h"
using namespace std;
int main(int argc, char const *argv[])
{
chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
auto begin = std::chrono::steady_clock::now();
sqlite3pp::database db("../uwu2x.db");
sqlite3pp::query q(db, "SELECT DISTINCT identifier, strftime('%Y-%m-%d', date) FROM interaction ORDER BY date ASC;");
sqlite3pp::query qry(db, "SELECT identifier FROM interaction;");
std::vector<std::vector<std::string>> interactions;
set<string> identifiers;
for (auto v : qry) {
string identifier;
v.getter() >> identifier;
identifiers.insert(identifier);
for (auto r : q)
{
std::string identifier, date;
r.getter() >> identifier >> date;
interactions.emplace_back(std::vector<std::string>{identifier, date});
}
cout << identifiers.size() << " users" << endl;
std::cout << interactions.size() << std::endl;
std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
cout << chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() << "ms elasped" << endl;
std::set<std::string> identifiers;
std::map<std::string, std::map<std::string, int>> activity;
for (size_t i = 0; i < interactions.size(); ++i)
{
const std::string &identifier = interactions[i][0];
const std::string &date = interactions[i][1];
if (activity.find(date) == activity.end())
{
activity[date]["u"] = 0;
activity[date]["n"] = 0;
}
activity[date]["u"] += 1;
if (identifiers.find(identifier) == identifiers.end())
{
activity[date]["n"] += 1;
identifiers.insert(identifier);
}
}
for (const auto &[key, val] : activity)
{
std::cout << key << " : u=" << val.at("u") << " n=" << val.at("n") << std::endl;
}
auto end = std::chrono::steady_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() << "ms elapsed" << std::endl;
return 0;
}