af63b32ab3d3eeb3fd76d1b70669b474508cf4d9
[arvados.git] / services / arv-git-httpd / main.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package main
6
7 import (
8         "flag"
9         "fmt"
10         "os"
11
12         "git.arvados.org/arvados.git/lib/config"
13         "github.com/coreos/go-systemd/daemon"
14         "github.com/ghodss/yaml"
15         log "github.com/sirupsen/logrus"
16 )
17
18 var version = "dev"
19
20 func main() {
21         logger := log.New()
22         log.SetFormatter(&log.JSONFormatter{
23                 TimestampFormat: "2006-01-02T15:04:05.000000000Z07:00",
24         })
25
26         flags := flag.NewFlagSet(os.Args[0], flag.ContinueOnError)
27         loader := config.NewLoader(os.Stdin, logger)
28         loader.SetupFlags(flags)
29
30         dumpConfig := flags.Bool("dump-config", false, "write current configuration to stdout and exit (useful for migrating from command line flags to config file)")
31         getVersion := flags.Bool("version", false, "print version information and exit.")
32
33         args := loader.MungeLegacyConfigArgs(logger, os.Args[1:], "-legacy-git-httpd-config")
34         err := flags.Parse(args)
35         if err == flag.ErrHelp {
36                 return
37         } else if err != nil {
38                 logger.Error(err)
39                 os.Exit(2)
40         } else if flags.NArg() != 0 {
41                 logger.Errorf("unrecognized command line arguments: %v", flags.Args())
42                 os.Exit(2)
43         }
44
45         if *getVersion {
46                 fmt.Printf("arv-git-httpd %s\n", version)
47                 return
48         }
49
50         cfg, err := loader.Load()
51         if err != nil {
52                 log.Fatal(err)
53         }
54
55         cluster, err := cfg.GetCluster("")
56         if err != nil {
57                 log.Fatal(err)
58         }
59
60         if *dumpConfig {
61                 out, err := yaml.Marshal(cfg)
62                 if err != nil {
63                         log.Fatal(err)
64                 }
65                 _, err = os.Stdout.Write(out)
66                 if err != nil {
67                         log.Fatal(err)
68                 }
69                 return
70         }
71
72         srv := &server{cluster: cluster}
73         if err := srv.Start(); err != nil {
74                 log.Fatal(err)
75         }
76         if _, err := daemon.SdNotify(false, "READY=1"); err != nil {
77                 log.Printf("Error notifying init daemon: %v", err)
78         }
79         log.Printf("arv-git-httpd %s started", version)
80         log.Println("Listening at", srv.Addr)
81         log.Println("Repository root", cluster.Git.Repositories)
82         if err := srv.Wait(); err != nil {
83                 log.Fatal(err)
84         }
85 }