Began adding DependencyInfos.

This commit is contained in:
Iron Prando da Silva
2021-11-04 13:12:26 +01:00
parent f855dbb16e
commit 0be4e0d6fb
7 changed files with 172 additions and 2 deletions

View File

@@ -91,6 +91,7 @@ add_executable(TraceAnalyzer
presentation/tracemetrictreewidget.cpp
businessObjects/phases/phase.cpp
businessObjects/phases/phasedependency.cpp
businessObjects/phases/dependencyinfos.cpp
presentation/tracedrawingproperties.cpp
presentation/util/traceplotline.cpp
presentation/util/traceplotlinecache.cpp

View File

@@ -0,0 +1,19 @@
#include "dependencyinfos.h"
DependencyInfos::DependencyInfos(Type type)
: mType(type)
{}
DependencyInfos::DependencyInfos()
{
mType = DependencyType;
}
DependencyInfos::~DependencyInfos()
{}
void DependencyInfos::addInfo(DependencyInfo info)
{
mInfos.push_back(info);
}

View File

@@ -0,0 +1,36 @@
#pragma once
#include <vector>
#include <QString>
struct DependencyInfo {
QString id;
float value;
};
class DependencyInfos
{
public:
enum Type {
DependencyType,
TimeDependency,
DelayedPhase,
DependencyPhase
};
public:
DependencyInfos(Type);
DependencyInfos();
~DependencyInfos();
void setType(Type type) { mType = type; }
void addInfo(DependencyInfo);
const std::vector<DependencyInfo>& getInfos() const { return mInfos; }
private:
Type mType;
std::vector<DependencyInfo> mInfos;
};

View File

@@ -73,7 +73,6 @@ void Phase::draw(QPainter *painter, const QwtScaleMap &xMap,
if (getGranularity() == Granularity::Bankwise) {
bool drawDependencyText = true;
DependencyOptions drawDependenciesOptions = drawingProperties.drawDependenciesOption;
if (drawDependenciesOptions.draw == DependencyOption::All ||
(drawDependenciesOptions.draw == DependencyOption::Selected && highlight))

View File

@@ -43,6 +43,7 @@ struct TransactionQueryTexts {
QString queryHead;
QString selectTransactionsByTimespan, selectTransactionById;
QString checkDependenciesExist, selectDependenciesByTimespan;
QString selectDependencyTypePercentages, selectTimeDependencyPercentages, selectDelayedPhasePercentages, selectDependencyPhasePercentages;
TransactionQueryTexts()
{
@@ -61,6 +62,62 @@ struct TransactionQueryTexts {
" ON DirectDependencies.DelayedPhaseID = timespanTransactions.PhaseID )";
// For some reason I could not use a parameter for these below
selectDependencyTypePercentages = "WITH TotalDeps (total) AS ( "
"SELECT COUNT(*) FROM DirectDependencies "
"), "
"DependencyTypeDeps (param, ndeps) AS ( "
"SELECT "
"DependencyType, "
"COUNT(*) "
"FROM DirectDependencies "
"GROUP BY \"DependencyType\" "
") "
"SELECT param, ROUND(ndeps*100.0 / (SELECT total FROM TotalDeps), 3) as percentage "
"FROM DependencyTypeDeps "
"ORDER BY percentage DESC ";
selectTimeDependencyPercentages = "WITH TotalDeps (total) AS ( "
"SELECT COUNT(*) FROM DirectDependencies "
"), "
"DependencyTypeDeps (param, ndeps) AS ( "
"SELECT "
"TimeDependency, "
"COUNT(*) "
"FROM DirectDependencies "
"GROUP BY \"TimeDependency\" "
") "
"SELECT param, ROUND(ndeps*100.0 / (SELECT total FROM TotalDeps), 3) as percentage "
"FROM DependencyTypeDeps "
"ORDER BY percentage DESC ";
selectDelayedPhasePercentages = "WITH TotalDeps (total) AS ( "
"SELECT COUNT(*) FROM DirectDependencies "
"), "
"DependencyTypeDeps (param, ndeps) AS ( "
"SELECT "
"DelayedPhaseName, "
"COUNT(*) "
"FROM DirectDependencies "
"GROUP BY \"DelayedPhaseName\" "
") "
"SELECT param, ROUND(ndeps*100.0 / (SELECT total FROM TotalDeps), 3) as percentage "
"FROM DependencyTypeDeps "
"ORDER BY percentage DESC ";
selectDependencyPhasePercentages = "WITH TotalDeps (total) AS ( "
"SELECT COUNT(*) FROM DirectDependencies "
"), "
"DependencyTypeDeps (param, ndeps) AS ( "
"SELECT "
"DependencyPhaseName, "
"COUNT(*) "
"FROM DirectDependencies "
"GROUP BY \"DependencyPhaseName\" "
") "
"SELECT param, ROUND(ndeps*100.0 / (SELECT total FROM TotalDeps), 3) as percentage "
"FROM DependencyTypeDeps "
"ORDER BY percentage DESC ";
}
};

View File

@@ -91,11 +91,18 @@ void TraceDB::prepareQueries()
selectDependenciesByTimespan = QSqlQuery(database);
selectDependenciesByTimespan.prepare(queryTexts.selectDependenciesByTimespan);
selectDependencyTypePercentages = QSqlQuery(database);
selectDependencyTypePercentages.prepare(queryTexts.selectDependencyTypePercentages);
selectTimeDependencyPercentages = QSqlQuery(database);
selectTimeDependencyPercentages.prepare(queryTexts.selectTimeDependencyPercentages);
selectDelayedPhasePercentages = QSqlQuery(database);
selectDelayedPhasePercentages.prepare(queryTexts.selectDelayedPhasePercentages);
selectDependencyPhasePercentages = QSqlQuery(database);
selectDependencyPhasePercentages.prepare(queryTexts.selectDependencyPhasePercentages);
}
void TraceDB::updateComments(const std::vector<CommentModel::Comment> &comments)
{
QSqlQuery query(database);
query.prepare("DELETE FROM Comments");
executeQuery(query);
@@ -381,6 +388,36 @@ vector<CommentModel::Comment> TraceDB::getDebugMessagesInTimespan(const Timespan
return parseCommentsFromQuery(selectDebugMessagesByTimespanWithLimit);
}
DependencyInfos TraceDB::getDependencyInfos(DependencyInfos::Type infoType)
{
DependencyInfos dummy;
executeQuery(checkDependenciesExist);
if (!checkDependenciesExist.next() || checkDependenciesExist.value(0).toInt() != 1) {
return dummy;
}
switch(infoType) {
case DependencyInfos::Type::DependencyType:
executeQuery(selectDependencyTypePercentages);
return parseDependencyInfos(selectDependencyTypePercentages, infoType);
case DependencyInfos::Type::TimeDependency:
executeQuery(selectTimeDependencyPercentages);
return parseDependencyInfos(selectTimeDependencyPercentages, infoType);
case DependencyInfos::Type::DelayedPhase:
executeQuery(selectDelayedPhasePercentages);
return parseDependencyInfos(selectDelayedPhasePercentages, infoType);
case DependencyInfos::Type::DependencyPhase:
executeQuery(selectDependencyPhasePercentages);
return parseDependencyInfos(selectDependencyPhasePercentages, infoType);
}
return dummy;
}
QSqlDatabase TraceDB::getDatabase() const
{
return database;
@@ -515,6 +552,17 @@ vector<CommentModel::Comment> TraceDB::parseCommentsFromQuery(QSqlQuery &query)
return result;
}
DependencyInfos TraceDB::parseDependencyInfos(QSqlQuery & query, const DependencyInfos::Type infoType)
{
DependencyInfos infos(infoType);
while(query.next()) {
infos.addInfo({query.value(0).toString(), query.value(1).toFloat()});
}
return infos;
}
void TraceDB::executeQuery(QSqlQuery query)
{

View File

@@ -51,6 +51,7 @@
#include "businessObjects/generalinfo.h"
#include "businessObjects/commandlengths.h"
#include "businessObjects/phases/phasefactory.h"
#include "businessObjects/phases/dependencyinfos.h"
#include "businessObjects/commentmodel.h"
#include "QueryTexts.h"
@@ -106,6 +107,9 @@ public:
std::vector<CommentModel::Comment> getDebugMessagesInTimespan(const Timespan &span,
unsigned int limit);
// TODO
DependencyInfos getDependencyInfos(DependencyInfos::Type infoType);
QSqlDatabase getDatabase() const;
private:
@@ -122,6 +126,10 @@ private:
QSqlQuery selectDebugMessagesByTimespanWithLimit;
QSqlQuery checkDependenciesExist;
QSqlQuery selectDependenciesByTimespan;
QSqlQuery selectDependencyTypePercentages;
QSqlQuery selectTimeDependencyPercentages;
QSqlQuery selectDelayedPhasePercentages;
QSqlQuery selectDependencyPhasePercentages;
TransactionQueryTexts queryTexts;
void prepareQueries();
@@ -133,6 +141,8 @@ private:
bool updateVisiblePhases = false);
std::vector<CommentModel::Comment> parseCommentsFromQuery(QSqlQuery &query);
DependencyInfos parseDependencyInfos(QSqlQuery & query, const DependencyInfos::Type infoType);
void executeScriptFile(QString fileName);
void dropAndCreateTables();