1 | #include "BuildGeneralInfoFetcher.h" |
2 | |
3 | #include <StageFetcher.h> |
4 | |
5 | #include <QJsonDocument> |
6 | #include <QJsonObject> |
7 | #include <QJsonArray> |
8 | |
9 | namespace Jenkins |
10 | { |
11 | |
12 | BuildGeneralInfoFetcher::BuildGeneralInfoFetcher(const Config &config, const JenkinsJobBuildInfo &build, |
13 | QObject *parent) |
14 | : IFetcher(config, parent) |
15 | , mBuild(build) |
16 | { |
17 | } |
18 | |
19 | void BuildGeneralInfoFetcher::triggerFetch() |
20 | { |
21 | get(mBuild.url + QString::fromUtf8("api/json" ), true); |
22 | } |
23 | |
24 | void BuildGeneralInfoFetcher::processData(const QJsonDocument &json) |
25 | { |
26 | auto jsonObject = json.object(); |
27 | |
28 | if (jsonObject.contains(QStringLiteral("duration" ))) |
29 | mBuild.duration = jsonObject[QStringLiteral("duration" )].toInt(); |
30 | if (jsonObject.contains(QStringLiteral("result" ))) |
31 | mBuild.result = jsonObject[QStringLiteral("result" )].toString(); |
32 | if (jsonObject.contains(QStringLiteral("timestamp" ))) |
33 | mBuild.date = QDateTime::fromMSecsSinceEpoch(jsonObject[QStringLiteral("timestamp" )].toInt()); |
34 | |
35 | if (jsonObject.contains(QStringLiteral("culprits" ))) |
36 | { |
37 | const auto culprits = jsonObject[QStringLiteral("culprits" )].toArray(); |
38 | |
39 | for (const auto &item : culprits) |
40 | { |
41 | const auto obj = item.toObject(); |
42 | |
43 | if (obj.contains(QStringLiteral("fullName" ))) |
44 | { |
45 | mBuild.user = obj[QStringLiteral("fullName" )].toString(); |
46 | break; |
47 | } |
48 | } |
49 | } |
50 | |
51 | if (jsonObject.contains(QStringLiteral("artifacts" ))) |
52 | { |
53 | const auto artifacts = jsonObject[QStringLiteral("artifacts" )].toArray(); |
54 | |
55 | for (const auto &artifact : artifacts) |
56 | { |
57 | JenkinsJobBuildInfo::Artifact sArtifact; |
58 | sArtifact.fileName = artifact[QStringLiteral("fileName" )].toString(); |
59 | sArtifact.url = QString("%1artifact/%2" ).arg(jsonObject[QStringLiteral("url" )].toString(), sArtifact.fileName); |
60 | |
61 | mBuild.artifacts.append(sArtifact); |
62 | } |
63 | } |
64 | |
65 | const auto stagesFetcher = new StageFetcher(mConfig, mBuild, this); |
66 | connect(stagesFetcher, &StageFetcher::signalStagesReceived, this, &BuildGeneralInfoFetcher::appendStages); |
67 | |
68 | stagesFetcher->triggerFetch(); |
69 | } |
70 | |
71 | void BuildGeneralInfoFetcher::appendStages(const QVector<JenkinsStageInfo> &stages) |
72 | { |
73 | mBuild.stages = stages; |
74 | |
75 | emit signalBuildInfoReceived(mBuild); |
76 | } |
77 | |
78 | } |
79 | |