WIP server queeu stuff

Jef Roosens 2022-12-06 14:11:17 +01:00
parent 6281ef7607
commit f7ca005ad5
Signed by: Jef Roosens
GPG Key ID: B75D4F293C7052DB
7 changed files with 69 additions and 23 deletions

View File

@ -20,6 +20,6 @@ pub fn agent(conf Config) ! {
logger.set_full_logpath(log_file) logger.set_full_logpath(log_file)
logger.log_to_console_too() logger.log_to_console_too()
mut d := agent.agent_init(logger, conf) mut d := agent_init(logger, conf)
d.run() d.run()
} }

View File

@ -5,15 +5,15 @@ import conf as vconf
struct Config { struct Config {
pub: pub:
log_level string = 'WARN' log_level string = 'WARN'
api_key string api_key string
address string address string
data_dir string data_dir string
max_concurrent_builds int = 1 max_concurrent_builds int = 1
polling_frequency int = 30 polling_frequency int = 30
// Architecture of agent // Architecture of agent
/* arch string */ // arch string
/* image_rebuild_frequency int = 1440 */ // image_rebuild_frequency int = 1440
} }
// cmd returns the cli module that handles the cron daemon. // cmd returns the cli module that handles the cron daemon.

View File

@ -13,13 +13,13 @@ const (
struct AgentDaemon { struct AgentDaemon {
logger shared log.Log logger shared log.Log
conf Config conf Config
// Which builds are currently running; length is same as // Which builds are currently running; length is same as
// conf.max_concurrent_builds // conf.max_concurrent_builds
builds []BuildConfig builds []BuildConfig
// Atomic variables used to detect when a build has finished; length is the // Atomic variables used to detect when a build has finished; length is the
// same as conf.max_concurrent_builds // same as conf.max_concurrent_builds
client client.Client client client.Client
atomics []u64 atomics []u64
} }
@ -39,10 +39,8 @@ pub fn (mut d AgentDaemon) run() {
for { for {
free_builds := d.update_atomics() free_builds := d.update_atomics()
if free_builds > 0 { if free_builds > 0 {
}
}
} }
} }

View File

@ -18,11 +18,11 @@ const (
pub struct BuildConfig { pub struct BuildConfig {
pub: pub:
id int id int
kind string kind string
url string url string
branch string branch string
repo string repo string
base_image string base_image string
} }

View File

@ -41,7 +41,7 @@ fn main() {
schedule.cmd(), schedule.cmd(),
man.cmd(), man.cmd(),
aur.cmd(), aur.cmd(),
agent.cmd() agent.cmd(),
] ]
} }
app.setup() app.setup()

View File

@ -0,0 +1,31 @@
module server
import web
import web.response { new_response }
// import db
import time
// import os
// import util
// import models { BuildLog, BuildLogFilter }
['/api/v1/builds/poll'; auth; get]
fn (mut app App) v1_poll_build_queue() web.Result {
arch := app.query['arch'] or {
return app.json(.bad_request, new_response('Missing arch query arg.'))
}
max_str := app.query['max'] or {
return app.json(.bad_request, new_response('Missing max query arg.'))
}
max := max_str.int()
mut out := []
now := time.now()
lock app.build_queue {
for app.build_queue.len() > 0 && out.len() < max {
}
}
}

View File

@ -6,6 +6,9 @@ import log
import repo import repo
import util import util
import db import db
import datatypes { MinHeap }
import build { BuildConfig }
import time
const ( const (
log_file_name = 'vieter.log' log_file_name = 'vieter.log'
@ -14,13 +17,26 @@ const (
logs_dir_name = 'logs' logs_dir_name = 'logs'
) )
struct ScheduledBuild {
pub:
timestamp time.Time
target_id int
build_config BuildConfig
}
// Overloaded operator for comparing ScheduledBuild objects
fn (r1 ScheduledBuild) < (r2 ScheduledBuild) bool {
return r1.timestamp < r2.timestamp
}
struct App { struct App {
web.Context web.Context
pub: pub:
conf Config [required; web_global] conf Config [required; web_global]
pub mut: pub mut:
repo repo.RepoGroupManager [required; web_global] repo repo.RepoGroupManager [required; web_global]
db db.VieterDb build_queue shared MinHeap<ScheduledBuild>
db db.VieterDb
} }
// server starts the web server & starts listening for requests // server starts the web server & starts listening for requests
@ -77,5 +93,6 @@ pub fn server(conf Config) ! {
conf: conf conf: conf
repo: repo repo: repo
db: db db: db
build_queue: MinHeap<ScheduledBuild>{}
}, conf.port) }, conf.port)
} }