| 
									
										
										
										
											2024-02-20 13:25:31 +00:00
										 |  |  | // Copyright 2024 Mikhail Klementev. All rights reserved. | 
					
						
							|  |  |  | // Use of this source code is governed by a AGPLv3 license | 
					
						
							|  |  |  | // (or later) that can be found in the LICENSE file. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package cmd | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"encoding/json" | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2024-02-27 02:00:07 +00:00
										 |  |  | 	"time" | 
					
						
							| 
									
										
										
										
											2024-02-20 13:25:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/rs/zerolog/log" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-26 08:55:27 +00:00
										 |  |  | 	"code.dumpstack.io/tools/out-of-tree/api" | 
					
						
							| 
									
										
										
										
											2024-02-20 13:25:31 +00:00
										 |  |  | 	"code.dumpstack.io/tools/out-of-tree/client" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-25 18:04:02 +00:00
										 |  |  | type daemonCmd struct { | 
					
						
							| 
									
										
										
										
											2024-02-20 13:25:31 +00:00
										 |  |  | 	Addr string `default:":63527"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Job  DaemonJobCmd  `cmd:"" aliases:"jobs" help:"manage jobs"` | 
					
						
							|  |  |  | 	Repo DaemonRepoCmd `cmd:"" aliases:"repos" help:"manage repositories"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type DaemonJobCmd struct { | 
					
						
							|  |  |  | 	List   DaemonJobsListCmd   `cmd:"" help:"list jobs"` | 
					
						
							|  |  |  | 	Status DaemonJobsStatusCmd `cmd:"" help:"show job status"` | 
					
						
							|  |  |  | 	Log    DaemonJobsLogsCmd   `cmd:"" help:"job logs"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-26 08:55:27 +00:00
										 |  |  | type DaemonJobsListCmd struct { | 
					
						
							| 
									
										
										
										
											2024-02-27 02:00:07 +00:00
										 |  |  | 	Group  string    `help:"group uuid"` | 
					
						
							|  |  |  | 	Repo   string    `help:"repo name"` | 
					
						
							|  |  |  | 	Commit string    `help:"commit sha"` | 
					
						
							|  |  |  | 	Status string    `help:"job status"` | 
					
						
							|  |  |  | 	After  time.Time `help:"created after" format:"2006-01-02 15:04:05"` | 
					
						
							|  |  |  | 	Before time.Time `help:"created before" format:"2006-01-02 15:04:05"` | 
					
						
							| 
									
										
										
										
											2024-02-26 08:55:27 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2024-02-20 13:25:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | func (cmd *DaemonJobsListCmd) Run(dm *DaemonCmd, g *Globals) (err error) { | 
					
						
							|  |  |  | 	c := client.Client{RemoteAddr: g.RemoteAddr} | 
					
						
							| 
									
										
										
										
											2024-02-26 08:55:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	params := api.ListJobsParams{ | 
					
						
							|  |  |  | 		Group:  cmd.Group, | 
					
						
							|  |  |  | 		Repo:   cmd.Repo, | 
					
						
							|  |  |  | 		Commit: cmd.Commit, | 
					
						
							|  |  |  | 		Status: api.Status(cmd.Status), | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-27 02:00:07 +00:00
										 |  |  | 	if !cmd.After.IsZero() { | 
					
						
							|  |  |  | 		params.Time.After = cmd.After.Unix() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if !cmd.Before.IsZero() { | 
					
						
							|  |  |  | 		params.Time.Before = cmd.Before.Unix() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-26 08:55:27 +00:00
										 |  |  | 	jobs, err := c.Jobs(params) | 
					
						
							| 
									
										
										
										
											2024-02-20 13:25:31 +00:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Error().Err(err).Msg("") | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	b, err := json.MarshalIndent(jobs, "", "  ") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Error().Err(err).Msg("") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fmt.Println(string(b)) | 
					
						
							|  |  |  | 	return | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type DaemonJobsStatusCmd struct { | 
					
						
							|  |  |  | 	UUID string `arg:""` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (cmd *DaemonJobsStatusCmd) Run(dm *DaemonCmd, g *Globals) (err error) { | 
					
						
							|  |  |  | 	c := client.Client{RemoteAddr: g.RemoteAddr} | 
					
						
							|  |  |  | 	st, err := c.JobStatus(cmd.UUID) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Error().Err(err).Msg("") | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fmt.Println(st) | 
					
						
							|  |  |  | 	return | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type DaemonJobsLogsCmd struct { | 
					
						
							|  |  |  | 	UUID string `arg:""` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (cmd *DaemonJobsLogsCmd) Run(dm *DaemonCmd, g *Globals) (err error) { | 
					
						
							|  |  |  | 	c := client.Client{RemoteAddr: g.RemoteAddr} | 
					
						
							|  |  |  | 	logs, err := c.JobLogs(cmd.UUID) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Error().Err(err).Msg("") | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for _, l := range logs { | 
					
						
							|  |  |  | 		log.Info().Msg(l.Name) | 
					
						
							|  |  |  | 		fmt.Println(l.Text) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type DaemonRepoCmd struct { | 
					
						
							|  |  |  | 	List DaemonRepoListCmd `cmd:"" help:"list repos"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type DaemonRepoListCmd struct{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (cmd *DaemonRepoListCmd) Run(dm *DaemonCmd, g *Globals) (err error) { | 
					
						
							|  |  |  | 	c := client.Client{RemoteAddr: g.RemoteAddr} | 
					
						
							|  |  |  | 	repos, err := c.Repos() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	b, err := json.MarshalIndent(repos, "", "  ") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Error().Err(err).Msg("") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fmt.Println(string(b)) | 
					
						
							|  |  |  | 	return | 
					
						
							|  |  |  | } |