From d9baa8e8d63231d029d09ca41652ea68689dbaba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0tibran=C3=BD?= Date: Wed, 13 Mar 2024 10:19:29 +0100 Subject: [PATCH 1/4] ulidtime now shows random part of ULID, and uses tabwritter for formatting. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Štibraný --- tools/ulidtime/main.go | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/tools/ulidtime/main.go b/tools/ulidtime/main.go index 3753ef9dc85..d36c73d1027 100644 --- a/tools/ulidtime/main.go +++ b/tools/ulidtime/main.go @@ -7,6 +7,7 @@ import ( "fmt" "log" "os" + "text/tabwriter" "time" "github.com/grafana/dskit/flagext" @@ -14,7 +15,10 @@ import ( ) 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) @@ -29,6 +33,22 @@ 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) @@ -36,13 +56,21 @@ func main() { 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) } From a1d19f38959922e7aafbfe2dcd29d88234bc2995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0tibran=C3=BD?= Date: Wed, 13 Mar 2024 10:22:00 +0100 Subject: [PATCH 2/4] Update documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Štibraný --- docs/internal/tools/ulidtime.md | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/docs/internal/tools/ulidtime.md b/docs/internal/tools/ulidtime.md index 17ae44ebcfa..dc9b61573c1 100644 --- a/docs/internal/tools/ulidtime.md +++ b/docs/internal/tools/ulidtime.md @@ -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 + +``` \ No newline at end of file From 0b0e33be63ab9585e698c0957c29b8aa8b20ddef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0tibran=C3=BD?= Date: Wed, 13 Mar 2024 10:22:59 +0100 Subject: [PATCH 3/4] CHANGELOG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Štibraný --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea4a72cadc9..2a0d80516c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 From 3fbcfa68af166e57ff7d6b821311cc1c0fc8c619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0tibran=C3=BD?= Date: Wed, 13 Mar 2024 14:59:26 +0100 Subject: [PATCH 4/4] make doc --- docs/internal/tools/ulidtime.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/internal/tools/ulidtime.md b/docs/internal/tools/ulidtime.md index dc9b61573c1..f961508ad9b 100644 --- a/docs/internal/tools/ulidtime.md +++ b/docs/internal/tools/ulidtime.md @@ -31,4 +31,4 @@ ULID TIMESTAMP MILLISECONDS RANDOM 01H9F454S0KD1VAYW53225D60D 2023-09-04T03:35:35.968Z 1693798535968 9b43b57b85188456980d 01H9HKGZ8PDWSEJYMPRZBG65YN 2023-09-05T02:42:41.046Z 1693881761046 6f32e97a96c7d70317d5 -``` \ No newline at end of file +```