Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ulidtime enhancements #7615

Merged
merged 4 commits into from
Mar 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@

### Tools

* [ENHANCEMENT] ulidtime: add option to show random part of ULID, timestamp in milliseconds and header. #7615

## 2.12.0-rc.0

### Grafana Mimir
Expand Down
29 changes: 25 additions & 4 deletions docs/internal/tools/ulidtime.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,29 @@ Example:

```
$ ulidtime 01FRCN18HV5B638BKNF4H52JP6 01FRCHB3HX5VBE6HJGSC4NW9DG 01FRCFGMP7TAXD2PTNWVW8RYYC 01FRCJHSJX7PQ38VQFQ2T9EF70
01FRCN18HV5B638BKNF4H52JP6 2022-01-02T05:43:41.883Z
01FRCHB3HX5VBE6HJGSC4NW9DG 2022-01-02T04:39:10.141Z
01FRCFGMP7TAXD2PTNWVW8RYYC 2022-01-02T04:07:14.375Z
01FRCJHSJX7PQ38VQFQ2T9EF70 2022-01-02T05:00:17.885Z
01FRCN18HV5B638BKNF4H52JP6 2022-01-02T05:43:41.883Z
01FRCHB3HX5VBE6HJGSC4NW9DG 2022-01-02T04:39:10.141Z
01FRCFGMP7TAXD2PTNWVW8RYYC 2022-01-02T04:07:14.375Z
01FRCJHSJX7PQ38VQFQ2T9EF70 2022-01-02T05:00:17.885Z
```

```
ulidtime -header -entropy -millis 01H8G30YH46MCFWK10PMXJN2KW 01H8K2R3AZT7N9JSJFF2NDGEA9 01H8N8E7SCB3PBBD6PERMJ7PEJ 01H8QTZPEXGG8TEQFBKY0BPQMF 01H8TDCKH5WM2D56KSGNATE9RT 01H8X1ZFE5BED94C7JX88ZF9K4 01H8ZN7G70Z28DDCXTPF7H8DJ4 01H926WF74G7YFWZ1394S7616G 01H94S30Z0VZQP3GWQX2X2X524 01H97970YAQ4EKCZ6QS1QB4Q27 01H99YVZ0ACNDYXF6FMWM91V4S 01H9CFBYCS0XHYNW10X1HC8NSQ 01H9F454S0KD1VAYW53225D60D 01H9HKGZ8PDWSEJYMPRZBG65YN

ULID TIMESTAMP MILLISECONDS RANDOM
01H8G30YH46MCFWK10PMXJN2KW 2023-08-23T02:19:22.532Z 1692757162532 3518fe4c20b53b2a8a7c
01H8K2R3AZT7N9JSJFF2NDGEA9 2023-08-24T06:12:15.839Z 1692857535839 d1ea99664f78aad83949
01H8N8E7SCB3PBBD6PERMJ7PEJ 2023-08-25T02:30:13.036Z 1692930613036 58ecb5b4d6762923d9d2
01H8QTZPEXGG8TEQFBKY0BPQMF 2023-08-26T02:32:48.349Z 1693017168349 8411a75deb9f80bb5e8f
01H8TDCKH5WM2D56KSGNATE9RT 2023-08-27T02:32:54.565Z 1693103574565 e504d29a798555a7271a
01H8X1ZFE5BED94C7JX88ZF9K4 2023-08-28T03:11:13.349Z 1693192273349 5b9a9230f2ea11f7a664
01H8ZN7G70Z28DDCXTPF7H8DJ4 2023-08-29T03:26:08.096Z 1693279568096 f890d6b3bab3cf143644
01H926WF74G7YFWZ1394S7616G 2023-08-30T03:13:09.86Z 1693365189860 81fcfe7c2349327304d0
01H94S30Z0VZQP3GWQX2X2X524 2023-08-31T03:09:47.872Z 1693451387872 dfef61c397e8ba2e9444
01H97970YAQ4EKCZ6QS1QB4Q27 2023-09-01T02:30:05.002Z 1693535405002 b91d367cd7c86eb25c47
01H99YVZ0ACNDYXF6FMWM91V4S 2023-09-02T03:27:00.106Z 1693625220106 655beebccfa72890ec99
01H9CFBYCS0XHYNW10X1HC8NSQ 2023-09-03T02:53:49.849Z 1693709629849 0763eaf020e862c45737
01H9F454S0KD1VAYW53225D60D 2023-09-04T03:35:35.968Z 1693798535968 9b43b57b85188456980d
01H9HKGZ8PDWSEJYMPRZBG65YN 2023-09-05T02:42:41.046Z 1693881761046 6f32e97a96c7d70317d5

```
36 changes: 32 additions & 4 deletions tools/ulidtime/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,18 @@ import (
"fmt"
"log"
"os"
"text/tabwriter"
"time"

"github.com/grafana/dskit/flagext"
"github.com/oklog/ulid"
)

func main() {
seconds := flag.Bool("seconds", false, "Print timestamp as unix timestamp in seconds")
seconds := flag.Bool("seconds", false, "Show timestamp as Unix timestamp in seconds")
millis := flag.Bool("millis", false, "Show timestamp as Unix timestamp in milliseconds")
entropy := flag.Bool("entropy", false, "Show random part of ULID as hex")
header := flag.Bool("header", false, "Show header")

// Parse CLI arguments.
args, err := flagext.ParseFlagsAndArguments(flag.CommandLine)
Expand All @@ -29,20 +33,44 @@ func main() {
return
}

tw := tabwriter.NewWriter(os.Stdout, 1, 8, 2, ' ', tabwriter.TabIndent)

if *header {
fmt.Fprint(tw, "ULID\tTIMESTAMP")
if *seconds {
fmt.Fprint(tw, "\tSECONDS")
}
if *millis {
fmt.Fprint(tw, "\tMILLISECONDS")
}
if *entropy {
fmt.Fprint(tw, "\tRANDOM")
}
fmt.Fprintln(tw)
}

exit := 0
for _, v := range args {
id, err := ulid.Parse(v)
if err != nil {
log.Printf("failed to parse %q: %v", v, err)
exit = 1
} else {
fmt.Fprint(tw, id.String())
fmt.Fprint(tw, "\t", ulid.Time(id.Time()).UTC().Format(time.RFC3339Nano))
if *seconds {
fmt.Println(id.String(), ulid.Time(id.Time()).UTC().Unix())
} else {
fmt.Println(id.String(), ulid.Time(id.Time()).UTC().Format(time.RFC3339Nano))
fmt.Fprint(tw, "\t", ulid.Time(id.Time()).UTC().Unix())
}
if *millis {
fmt.Fprint(tw, "\t", ulid.Time(id.Time()).UTC().UnixMilli())
}
if *entropy {
fmt.Fprintf(tw, "\t%02x", id.Entropy())
}
fmt.Fprintln(tw)
}
}

tw.Flush()
os.Exit(exit)
}
Loading