forked from hswaw/hscloud
78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"flag"
|
||
|
"net"
|
||
|
"net/http"
|
||
|
|
||
|
"code.hackerspace.pl/hscloud/go/mirko"
|
||
|
|
||
|
"github.com/golang/glog"
|
||
|
"github.com/minio/minio-go/v7"
|
||
|
"github.com/minio/minio-go/v7/pkg/credentials"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
flagListenPublic = ":8080"
|
||
|
flagObjectEndpoint = "object.ceph-waw3.hswaw.net"
|
||
|
flagObjectAccessKey = ""
|
||
|
flagObjectSecretKey = ""
|
||
|
flagObjectBucket = ""
|
||
|
flagObjectPrefix = "cache/"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
flag.StringVar(&flagListenPublic, "listen_public", flagListenPublic, "Address to listen on for Bazel HTTP caching protocol clients")
|
||
|
flag.StringVar(&flagObjectEndpoint, "object_endpoint", flagObjectEndpoint, "Object Storage endpoint name")
|
||
|
flag.StringVar(&flagObjectAccessKey, "object_access_key", flagObjectEndpoint, "Object Storage AccessKey")
|
||
|
flag.StringVar(&flagObjectSecretKey, "object_secret_key", flagObjectEndpoint, "Object Storage SecretKey")
|
||
|
flag.StringVar(&flagObjectBucket, "object_bucket", flagObjectBucket, "Object Storage bucket name")
|
||
|
flag.StringVar(&flagObjectPrefix, "object_prefix", flagObjectPrefix, "Object Storage prefix for paths")
|
||
|
flag.Parse()
|
||
|
|
||
|
if flagObjectBucket == "" {
|
||
|
glog.Exitf("object_bucket must be set")
|
||
|
}
|
||
|
|
||
|
m := mirko.New()
|
||
|
if err := m.Listen(); err != nil {
|
||
|
glog.Exitf("Listen(): %v", err)
|
||
|
}
|
||
|
|
||
|
minioClient, err := minio.New(flagObjectEndpoint, &minio.Options{
|
||
|
Creds: credentials.NewStaticV4(flagObjectAccessKey, flagObjectSecretKey, ""),
|
||
|
Secure: true,
|
||
|
})
|
||
|
|
||
|
if err != nil {
|
||
|
glog.Exitf("Failed to initialize Object Storage client: %v", err)
|
||
|
}
|
||
|
|
||
|
s := newService(minioClient, flagObjectBucket, flagObjectPrefix)
|
||
|
|
||
|
httpListen, err := net.Listen("tcp", flagListenPublic)
|
||
|
if err != nil {
|
||
|
glog.Exitf("net.Listen: %v", err)
|
||
|
}
|
||
|
httpServer := &http.Server{
|
||
|
Addr: flagListenPublic,
|
||
|
Handler: s.publicHandler,
|
||
|
}
|
||
|
|
||
|
errs := make(chan error, 0)
|
||
|
go func() {
|
||
|
glog.Infof("Public listening on %s", flagListenPublic)
|
||
|
errs <- httpServer.Serve(httpListen)
|
||
|
}()
|
||
|
|
||
|
if err := m.Serve(); err != nil {
|
||
|
glog.Exitf("Serve(): %v", err)
|
||
|
}
|
||
|
|
||
|
select {
|
||
|
case <-m.Done():
|
||
|
case err := <-errs:
|
||
|
glog.Exitf("Serve(): %v", err)
|
||
|
}
|
||
|
}
|