+ if minutesBetweenRuns == 0 {
+ arv, err := arvadosclient.MakeArvadosClient()
+ if err != nil {
+ loggerutil.FatalWithMessage(arvLogger, fmt.Sprintf("Error making arvados client: %v", err))
+ }
+ err = singlerun(arv)
+ if err != nil {
+ loggerutil.FatalWithMessage(arvLogger, fmt.Sprintf("singlerun: %v", err))
+ }
+ } else {
+ waitTime := time.Minute * time.Duration(minutesBetweenRuns)
+ for {
+ log.Println("Beginning Run")
+ arv, err := arvadosclient.MakeArvadosClient()
+ if err != nil {
+ loggerutil.FatalWithMessage(arvLogger, fmt.Sprintf("Error making arvados client: %v", err))
+ }
+ err = singlerun(arv)
+ if err != nil {
+ log.Printf("singlerun: %v", err)
+ }
+ log.Printf("Sleeping for %d minutes", minutesBetweenRuns)
+ time.Sleep(waitTime)
+ }
+ }
+}
+
+var arvLogger *logger.Logger
+
+func singlerun(arv arvadosclient.ArvadosClient) error {
+ var err error
+ if isAdmin, err := util.UserIsAdmin(arv); err != nil {
+ return errors.New("Error verifying admin token: " + err.Error())
+ } else if !isAdmin {
+ return errors.New("Current user is not an admin. Datamanager requires a privileged token.")
+ }
+
+ if logEventTypePrefix != "" {
+ arvLogger, err = logger.NewLogger(logger.LoggerParams{
+ Client: arv,
+ EventTypePrefix: logEventTypePrefix,
+ WriteInterval: time.Second * time.Duration(logFrequencySeconds)})
+ }
+
+ loggerutil.LogRunInfo(arvLogger)
+ if arvLogger != nil {
+ arvLogger.AddWriteHook(loggerutil.LogMemoryAlloc)
+ }
+
+ var (
+ dataFetcher summary.DataFetcher
+ readCollections collection.ReadCollections
+ keepServerInfo keep.ReadServers
+ )
+
+ if summary.ShouldReadData() {
+ dataFetcher = summary.ReadData
+ } else {
+ dataFetcher = BuildDataFetcher(arv)
+ }
+
+ err = dataFetcher(arvLogger, &readCollections, &keepServerInfo)
+ if err != nil {
+ return err
+ }
+
+ err = summary.MaybeWriteData(arvLogger, readCollections, keepServerInfo)