tools.aw_id

Yohn Y. 2025-04-10 Parent:3a967e85c0ca Child:5ba13dd7ef05

12:223ba01da43a Go to Latest

tools.aw_id/src/main.go

* Новые автоматические версии выпускается в форме, пригодном для сортировки

History
awgur@12 1 // devel.a0fs.ru -- aw_id -- v1.r202504.2 //
awgur@0 2 /*
awgur@0 3 Утилиты генерирования полезных в работе ID
awgur@0 4 */
awgur@0 5 package main
awgur@0 6
awgur@0 7 import (
awgur@0 8 "fmt"
awgur@0 9 "os"
awgur@0 10 "time"
awgur@0 11
awgur@11 12 "strconv"
awgur@11 13
awgur@0 14 "github.com/google/uuid"
awgur@0 15 )
awgur@0 16
awgur@0 17 const (
awgur@0 18 TIME_ID = iota
awgur@0 19 TIME_HUM
awgur@10 20 TIME_HUM_RU
awgur@0 21 TIME_HUM_SAFE
awgur@0 22 TIME_HUM_SAFE2
awgur@2 23 TIME_ID_SHORT
awgur@2 24 TIME_ID_SHORT2
awgur@0 25 )
awgur@0 26
awgur@0 27 func get_time_id(id_type int) string {
awgur@0 28 cur_time := time.Now()
awgur@0 29 var time_format string = time.RFC3339
awgur@0 30
awgur@0 31 switch id_type {
awgur@0 32 case TIME_ID:
awgur@0 33 time_format = "20060102-150405"
awgur@10 34 case TIME_HUM_RU:
awgur@10 35 time_format = "02.01.2006 15:04:05"
awgur@0 36 case TIME_HUM:
awgur@0 37 time_format = "2006-01-02 15:04:05"
awgur@0 38 case TIME_HUM_SAFE:
awgur@0 39 time_format = "2006-01-02 15-04-05"
awgur@0 40 case TIME_HUM_SAFE2:
awgur@0 41 time_format = "2006-01-02_15-04-05"
awgur@2 42 case TIME_ID_SHORT:
awgur@3 43 time_format = "20060102"
awgur@2 44 case TIME_ID_SHORT2:
awgur@3 45 time_format = "200601"
awgur@0 46 }
awgur@0 47
awgur@0 48 return cur_time.Format(time_format)
awgur@0 49 }
awgur@0 50
awgur@0 51 func get_uuid() string {
awgur@0 52 res := uuid.New()
awgur@0 53 return res.String()
awgur@0 54 }
awgur@0 55
awgur@7 56 func get_ver_id() string {
awgur@7 57 return fmt.Sprintf("v0.r%s.1", get_time_id(TIME_ID_SHORT2))
awgur@7 58 }
awgur@7 59
awgur@8 60 func get_ver_id2() string {
awgur@8 61 return fmt.Sprintf("0.%s.1", get_time_id(TIME_ID_SHORT2))
awgur@8 62 }
awgur@8 63
awgur@11 64 func get_ver_auto_tag() string {
awgur@12 65 const CDB uint64 = 62
awgur@12 66 var auto_version []byte = []byte{
awgur@12 67 '0', '0', '0',
awgur@12 68 '0', '0', '0'}
awgur@11 69
awgur@12 70 var CD [CDB]byte = [CDB]byte{'0', '1', '2', '3', '4', '5', '6',
awgur@12 71 '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
awgur@12 72 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
awgur@12 73 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
awgur@12 74 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
awgur@12 75 't', 'u', 'v', 'w', 'x', 'y', 'z'}
awgur@12 76
awgur@11 77 buf_time := time.Now()
awgur@11 78 buf_u64, err := strconv.ParseUint(buf_time.Format("02150405"), 10, 64)
awgur@11 79 if err == nil {
awgur@11 80 buf_u64 = buf_u64*uint64(100) + uint64(buf_time.Nanosecond()/10000000)
awgur@11 81 if err == nil {
awgur@12 82 var buf_u64_idx uint64
awgur@12 83 var ar_idx uint = 5
awgur@12 84
awgur@12 85 for buf_u64 >= CDB && ar_idx > 0 {
awgur@12 86 buf_u64_idx = buf_u64 % CDB
awgur@12 87 buf_u64 /= CDB
awgur@12 88 auto_version[ar_idx] = CD[buf_u64_idx]
awgur@12 89 ar_idx--
awgur@12 90 }
awgur@12 91
awgur@12 92 if buf_u64 >= CDB {
awgur@12 93 panic(fmt.Sprintf("get_ver_auto_tag: Need more size in buffer, value %v > %v", buf_u64, CDB))
awgur@12 94
awgur@12 95 } else {
awgur@12 96 auto_version[ar_idx] = CD[buf_u64]
awgur@12 97
awgur@12 98 }
awgur@11 99
awgur@11 100 }
awgur@11 101 }
awgur@11 102
awgur@12 103 return string(auto_version)
awgur@11 104 }
awgur@11 105
awgur@11 106 func get_ver_id3() string {
awgur@11 107 return fmt.Sprintf("v0.r%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag())
awgur@11 108 }
awgur@11 109
awgur@11 110 func get_ver_id4() string {
awgur@11 111 return fmt.Sprintf("0.%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag())
awgur@11 112 }
awgur@11 113
awgur@0 114 func prnt_out(k, v string) {
awgur@0 115 fmt.Printf("%10s : %s\n", k, v)
awgur@0 116 }
awgur@0 117
awgur@0 118 func make_all_ids() {
awgur@0 119 prnt_out("uuid", get_uuid())
awgur@0 120 prnt_out("ts", get_time_id(TIME_ID))
awgur@2 121 prnt_out("tss", get_time_id(TIME_ID_SHORT))
awgur@2 122 prnt_out("tss2", get_time_id(TIME_ID_SHORT2))
awgur@0 123 prnt_out("hr", get_time_id(TIME_HUM))
awgur@10 124 prnt_out("hrr", get_time_id(TIME_HUM_RU))
awgur@0 125 prnt_out("hrs", get_time_id(TIME_HUM_SAFE))
awgur@0 126 prnt_out("hrs2", get_time_id(TIME_HUM_SAFE2))
awgur@7 127 prnt_out("v", get_ver_id())
awgur@11 128 prnt_out("va", get_ver_id3())
awgur@8 129 prnt_out("vs", get_ver_id2())
awgur@11 130 prnt_out("vsa", get_ver_id4())
awgur@0 131 fmt.Println("")
awgur@0 132 }
awgur@0 133
awgur@0 134 func main() {
awgur@0 135 if len(os.Args) > 1 {
awgur@0 136 switch os.Args[1] {
awgur@0 137 case "uuid":
awgur@0 138 fmt.Println(get_uuid())
awgur@0 139 case "ts":
awgur@0 140 fmt.Println(get_time_id(TIME_ID))
awgur@0 141 case "hr":
awgur@0 142 fmt.Println(get_time_id(TIME_HUM))
awgur@10 143 case "hrr":
awgur@10 144 fmt.Println(get_time_id(TIME_HUM_RU))
awgur@0 145 case "hrs":
awgur@0 146 fmt.Println(get_time_id(TIME_HUM_SAFE))
awgur@0 147 case "hrs2":
awgur@0 148 fmt.Println(get_time_id(TIME_HUM_SAFE2))
awgur@2 149 case "tss":
awgur@2 150 fmt.Println(get_time_id(TIME_ID_SHORT))
awgur@2 151 case "tss2":
awgur@2 152 fmt.Println(get_time_id(TIME_ID_SHORT2))
awgur@7 153 case "v":
awgur@7 154 fmt.Println(get_ver_id())
awgur@11 155 case "va":
awgur@11 156 fmt.Println(get_ver_id3())
awgur@8 157 case "vs":
awgur@8 158 fmt.Println(get_ver_id2())
awgur@11 159 case "vsa":
awgur@11 160 fmt.Println(get_ver_id4())
awgur@0 161 default:
awgur@11 162 fmt.Println("Need one of: ")
awgur@11 163 fmt.Println(" uuid, ts, tss, tss2, hr, hrr, hrs, hrs2,")
awgur@11 164 fmt.Println(" v, va, vs, vsa")
awgur@0 165 }
awgur@0 166 fmt.Println("")
awgur@0 167 } else {
awgur@0 168 make_all_ids()
awgur@0 169 }
awgur@0 170 }