package main import ( "fmt" "log" "net/http" "os" "time" "src.opensuse.org/autogits/common" ) const ( ListenAddr = "[::1]:8003" AppName = "obs-status-service" ) type BuildStatusCacheItem struct { CacheTime time.Time Result []*common.BuildResult } var obs *common.ObsClient var buildStatusCache map[string]BuildStatusCacheItem /* func CacheBuildStatus(prj, pkg string) ([]common.BuildResult, error) { list, err := obs.BuildStatus(prj, pkg) if err != nil { return nil, err } return } */ func PackageBuildStatus(prj, pkg string) (common.ObsBuildStatusDetail, error) { return common.ObsBuildStatusDetail { Code: "succeeded", Description: "stuff", Success: true, Finished: true, }, nil } /* func PackageStatusSvg(buildStatus []common.ObsBuildStatusDetail) []byte { return } */ func PackageStatusSummarySvg(buildStatus common.ObsBuildStatusDetail) []byte { fillColor := "orange" textColor := "grey" if buildStatus.Finished { textColor = "black" if buildStatus.Success { fillColor = "green" } else { fillColor = "red" } } return []byte(` ` + buildStatus.Code + ` `) } func main() { common.RequireObsSecretToken() go ProcessingObsMessages("rabbit.opensuse.org", "opensuse", "opensuse", "pubsub") obsHost := os.Getenv("OBS_HOSTNAME") if len(obsHost) == 0 { log.Fatal("OBS_HOSTNAME env required.") } /* if obs, err := common.NewObsClient(obsHost); err != nil { log.Fatal(err) } */ http.HandleFunc("GET /{ObsProject}", func(res http.ResponseWriter, req *http.Request) { res.WriteHeader(http.StatusBadRequest) }) http.HandleFunc("GET /{ObsProject}/{Package}", func(res http.ResponseWriter, req *http.Request) { obsPrj := req.PathValue("ObsProject") obsPkg := req.PathValue("ObsPackage") status, _ := PackageBuildStatus(obsPrj, obsPkg) svg := PackageStatusSummarySvg(status) res.Header().Add("content-type", "image/svg+xml") res.Header().Add("size", fmt.Sprint(len(svg))) res.Write(svg) }) log.Fatal(http.ListenAndServe(ListenAddr, nil)) }