1
0
mirror of https://github.com/ohwgiles/laminar.git synced 2026-03-02 03:40:21 +00:00

refactor: remove run page json type hack

this hack tried to avoid sending unnecessary data to the frontend,
but it was more trouble than it's worth
This commit is contained in:
Oliver Giles
2019-11-01 07:27:34 +02:00
parent 39ca7e86cf
commit ba472711be
5 changed files with 42 additions and 19 deletions

View File

@@ -278,16 +278,10 @@ kj::Promise<void> Http::startServer(kj::Timer& timer, kj::Own<kj::ConnectionRece
return server->listenHttp(*listener).attach(cleanupPeers(timer)).attach(kj::mv(listener)).attach(kj::mv(server));
}
void Http::notifyEvent(const char *type, const char *data, std::string job, uint run)
void Http::notifyEvent(const char *data, std::string job)
{
for(EventPeer* c : eventPeers) {
if(c->scope.wantsStatus(job, run)
// The run page also should know that another job has started
// (so maybe it can show a previously hidden "next" button).
// Hence this small hack:
// TODO obviate
|| (std::string(type)=="job_started" && c->scope.type == MonitorScope::Type::RUN && c->scope.job == job))
{
if(c->scope.wantsStatus(job)) {
c->pendingOutput.push_back("data: " + std::string(data) + "\n\n");
c->fulfiller->fulfill();
}

View File

@@ -40,7 +40,7 @@ public:
kj::Promise<void> startServer(kj::Timer &timer, kj::Own<kj::ConnectionReceiver> &&listener);
void notifyEvent(const char* type, const char* data, std::string job = nullptr, uint run = 0);
void notifyEvent(const char* data, std::string job = nullptr);
void notifyLog(std::string job, uint run, std::string log_chunk, bool eot);
private:

View File

@@ -574,7 +574,7 @@ std::shared_ptr<Run> Laminar::queueJob(std::string name, ParamMap params) {
.startObject("data")
.set("name", name)
.EndObject();
http->notifyEvent("job_queued", j.str(), name.c_str());
http->notifyEvent(j.str(), name.c_str());
assignNewJobs();
return run;
@@ -666,7 +666,7 @@ bool Laminar::tryStartRun(std::shared_ptr<Run> run, int queueIndex) {
}
j.EndArray();
j.EndObject();
http->notifyEvent("job_started", j.str(), run->name.c_str(), run->build);
http->notifyEvent(j.str(), run->name.c_str());
return true;
}
}
@@ -755,7 +755,7 @@ void Laminar::runFinished(Run * r) {
populateArtifacts(j, r->name, r->build);
j.EndArray();
j.EndObject();
http->notifyEvent("job_completed", j.str(), r->name, r->build);
http->notifyEvent(j.str(), r->name);
http->notifyLog(r->name, r->build, "", true);
// erase reference to run from activeJobs. Since runFinished is called in a
// lambda whose context contains a shared_ptr<Run>, the run won't be deleted
@@ -797,7 +797,7 @@ bool Laminar::handleBadgeRequest(std::string job, std::string &badge) {
db->stmt("SELECT result FROM builds WHERE name = ? ORDER BY number DESC LIMIT 1")
.bind(job)
.fetch<int>([&](int result){
rs = (RunState) result;
rs = RunState(result);
});
if(rs == RunState::UNKNOWN)
return false;

View File

@@ -41,19 +41,20 @@ struct MonitorScope {
order_desc(true)
{}
// whether this scope wants status information about the given job or run
// whether this scope wants status information for the specified job
bool wantsStatus(std::string ajob, uint anum = 0) const {
if(type == HOME || type == ALL) return true;
if(type == JOB) return ajob == job;
if(type == RUN) return ajob == job && anum == num;
return false;
else return ajob == job;
// we could have checked that the run number matches, but actually the
// run page needs to know about a non-matching run number in order to
// know whether to display the "next" arrow.
}
Type type;
std::string job;
uint num = 0;
uint num ;
// sorting
uint page = 0;
uint page;
std::string field;
bool order_desc;
};