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) } }