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