master
go 51 lines 991 Bytes
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package azure_monitor
4
5 import (
6 "context"
7 "crypto/sha1"
8 "encoding/hex"
9 "strings"
10 "time"
11 )
12
13 const profileNamePattern = "^[a-z][a-z0-9_]*$"
14
15 func stringsLowerTrim(v string) string {
16 return strings.ToLower(strings.TrimSpace(v))
17 }
18
19 func stringsTrim(v string) string {
20 return strings.TrimSpace(v)
21 }
22
23 func hashShort(v string) string {
24 sum := sha1.Sum([]byte(strings.ToLower(strings.TrimSpace(v))))
25 return hex.EncodeToString(sum[:6])
26 }
27
28 func withOptionalTimeout(ctx context.Context, timeout time.Duration) (context.Context, context.CancelFunc) {
29 if timeout <= 0 {
30 return ctx, func() {}
31 }
32 return context.WithTimeout(ctx, timeout)
33 }
34
35 func isValidProfileName(v string) bool {
36 v = stringsTrim(v)
37 if len(v) == 0 {
38 return false
39 }
40 if v[0] < 'a' || v[0] > 'z' {
41 return false
42 }
43 for i := 1; i < len(v); i++ {
44 c := v[i]
45 if (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '_' {
46 continue
47 }
48 return false
49 }
50 return true
51 }