forked from vieter-v/vieter
				
			feat(cli): interpet input dates & print dates as local timezone
							parent
							
								
									f0565c4168
								
							
						
					
					
						commit
						edd71b41c2
					
				| 
						 | 
				
			
			@ -20,7 +20,7 @@ pub fn cmd() cli.Command {
 | 
			
		|||
		commands: [
 | 
			
		||||
			cli.Command{
 | 
			
		||||
				name: 'list'
 | 
			
		||||
				description: 'List build logs.'
 | 
			
		||||
				description: 'List build logs. All date strings in the output are converted to the local timezone. Any time strings provided as input should be in the local timezone as well.'
 | 
			
		||||
				flags: [
 | 
			
		||||
					cli.Flag{
 | 
			
		||||
						name: 'limit'
 | 
			
		||||
| 
						 | 
				
			
			@ -39,7 +39,7 @@ pub fn cmd() cli.Command {
 | 
			
		|||
					},
 | 
			
		||||
					cli.Flag{
 | 
			
		||||
						name: 'today'
 | 
			
		||||
						description: 'Only list logs started today (UTC time).'
 | 
			
		||||
						description: 'Only list logs started today.'
 | 
			
		||||
						flag: cli.FlagType.bool
 | 
			
		||||
					},
 | 
			
		||||
					cli.Flag{
 | 
			
		||||
| 
						 | 
				
			
			@ -49,17 +49,17 @@ pub fn cmd() cli.Command {
 | 
			
		|||
					},
 | 
			
		||||
					cli.Flag{
 | 
			
		||||
						name: 'day'
 | 
			
		||||
						description: 'Only list logs started on this day. Format is YYYY-MM-DD.'
 | 
			
		||||
						description: 'Only list logs started on this day. (format: YYYY-MM-DD)'
 | 
			
		||||
						flag: cli.FlagType.string
 | 
			
		||||
					},
 | 
			
		||||
					cli.Flag{
 | 
			
		||||
						name: 'before'
 | 
			
		||||
						description: 'Only list logs started before this timestamp. Accepts any RFC 3339 date.'
 | 
			
		||||
						description: 'Only list logs started before this timestamp. (format: YYYY-MM-DD HH:mm:ss)'
 | 
			
		||||
						flag: cli.FlagType.string
 | 
			
		||||
					},
 | 
			
		||||
					cli.Flag{
 | 
			
		||||
						name: 'after'
 | 
			
		||||
						description: 'Only list logs started after this timestamp. Accepts any RFC 3339 date.'
 | 
			
		||||
						description: 'Only list logs started after this timestamp. (format: YYYY-MM-DD HH:mm:ss)'
 | 
			
		||||
						flag: cli.FlagType.string
 | 
			
		||||
					},
 | 
			
		||||
				]
 | 
			
		||||
| 
						 | 
				
			
			@ -84,6 +84,8 @@ pub fn cmd() cli.Command {
 | 
			
		|||
						filter.repo = repo_id
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					tz_offset := time.offset()
 | 
			
		||||
 | 
			
		||||
					if cmd.flags.get_bool('today')? {
 | 
			
		||||
						today := time.now()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -91,7 +93,7 @@ pub fn cmd() cli.Command {
 | 
			
		|||
							year: today.year
 | 
			
		||||
							month: today.month
 | 
			
		||||
							day: today.day
 | 
			
		||||
						})
 | 
			
		||||
						}).add_seconds(-tz_offset)
 | 
			
		||||
						filter.before = filter.after.add_days(1)
 | 
			
		||||
					}
 | 
			
		||||
					// The -today flag overwrites any of the other date flags.
 | 
			
		||||
| 
						 | 
				
			
			@ -102,21 +104,25 @@ pub fn cmd() cli.Command {
 | 
			
		|||
 | 
			
		||||
						if day_str != '' {
 | 
			
		||||
							day := time.parse_rfc3339(day_str)?
 | 
			
		||||
 | 
			
		||||
							filter.after = time.new_time(time.Time{
 | 
			
		||||
							day_utc := time.new_time(time.Time{
 | 
			
		||||
								year: day.year
 | 
			
		||||
								month: day.month
 | 
			
		||||
								day: day.day
 | 
			
		||||
							})
 | 
			
		||||
							}).add_seconds(-tz_offset)
 | 
			
		||||
 | 
			
		||||
							filter.before = filter.after.add_days(1)
 | 
			
		||||
							// The extra -1 is so we also return logs that
 | 
			
		||||
							// started at exactly midnight (filter bounds are
 | 
			
		||||
							// exclusive). therefore, we have to request logs
 | 
			
		||||
							// started after 23:59:59 the previous day.
 | 
			
		||||
							filter.after = day_utc.add_seconds(-1)
 | 
			
		||||
							filter.before = day_utc.add_days(1)
 | 
			
		||||
						} else {
 | 
			
		||||
							if before_str != '' {
 | 
			
		||||
								filter.before = time.parse_rfc3339(before_str)?
 | 
			
		||||
								filter.before = time.parse(before_str)?.add_seconds(-tz_offset)
 | 
			
		||||
							}
 | 
			
		||||
 | 
			
		||||
							if after_str != '' {
 | 
			
		||||
								filter.after = time.parse_rfc3339(after_str)?
 | 
			
		||||
								filter.after = time.parse(after_str)?.add_seconds(-tz_offset)
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
| 
						 | 
				
			
			@ -162,7 +168,7 @@ pub fn cmd() cli.Command {
 | 
			
		|||
 | 
			
		||||
// print_log_list prints a list of logs.
 | 
			
		||||
fn print_log_list(logs []BuildLog) ? {
 | 
			
		||||
	data := logs.map([it.id.str(), it.repo_id.str(), it.start_time.str(),
 | 
			
		||||
	data := logs.map([it.id.str(), it.repo_id.str(), it.start_time.local().str(),
 | 
			
		||||
		it.exit_code.str()])
 | 
			
		||||
 | 
			
		||||
	println(console.pretty_table(['id', 'repo', 'start time', 'exit code'], data)?)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,6 +83,7 @@ pub fn (mut d DockerConn) inspect_container(id string) ?ContainerInspect {
 | 
			
		|||
 | 
			
		||||
	mut data := json.decode(ContainerInspect, body)?
 | 
			
		||||
 | 
			
		||||
	// The Docker engine API *should* always return UTC time.
 | 
			
		||||
	data.state.start_time = time.parse_rfc3339(data.state.start_time_str)?
 | 
			
		||||
 | 
			
		||||
	if data.state.status == 'exited' {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue