-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathflair.go
More file actions
134 lines (115 loc) ยท 2.98 KB
/
Copy pathflair.go
File metadata and controls
134 lines (115 loc) ยท 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package nara
import (
"crypto/sha256"
"encoding/binary"
"math/rand"
"os"
"strings"
"github.com/eljojo/nara/identity"
)
func (ln *LocalNara) Flair() string {
awards := ln.Me.Flair(ln.Soul, ln.isRaspberryPi, ln.isNixOs, ln.isKubernetes)
// Network-dependent flair (only for local nara)
networkSize := len(ln.Network.Neighbourhood)
myStartTime := ln.Network.local.getMeObservation().StartTime
if networkSize > 2 && myStartTime > 0 {
// Age-based flair (requires knowing our own StartTime)
if ln.Me.Name == ln.Network.oldestNara().Name {
awards = awards + "๐ง"
}
if ln.Me.Name == ln.Network.oldestNaraBarrio().Name {
awards = awards + "๐"
}
if ln.Me.Name == ln.Network.youngestNara().Name {
awards = awards + "๐ค"
}
if ln.Me.Name == ln.Network.youngestNaraBarrio().Name {
awards = awards + "๐ฆ"
}
if ln.Me.Name == ln.Network.mostRestarts().Name {
awards = awards + "๐"
}
} else if networkSize > 2 && myStartTime == 0 {
// Waiting for opinions to form
awards = awards + "๐ค"
}
// Status-dependent flair
if ln.Me.Status.Chattiness >= 80 {
awards = awards + "๐ฌ"
}
if ln.Me.Status.HostStats.LoadAvg >= 0.8 {
awards = awards + "๐"
} else if ln.Me.Status.HostStats.LoadAvg <= 0.1 {
awards = awards + "๐"
}
if ln.uptime() < (3600 * 6) {
awards = awards + "๐ถ"
}
if ln.isBooting() {
awards = awards + "๐ก"
}
return awards
}
func (nara *Nara) Flair(soul string, isRaspberryPi bool, isNixOs bool, isKubernetes bool) string {
awards := ""
if nara.IsInHarmony(soul) {
awards = identity.Gemstone(nara.Name.String(), soul)
} else {
awards = "๐ค"
}
if nara.Name.String() == nara.Hostname {
awards = awards + "๐งโ๐"
}
if isRaspberryPi {
awards = awards + "๐"
}
if isNixOs {
awards = awards + "โ๏ธ"
}
if isKubernetes {
awards = awards + "๐ณ"
}
// Trend Flair
if nara.Status.Trend != "" {
awards = awards + nara.Status.TrendEmoji
}
// Expressive Personality Flair
flairCount := (nara.Status.Personality.Sociability / 31) + 1
hasher := sha256.New()
hasher.Write([]byte(nara.Name))
seed := int64(binary.BigEndian.Uint64(hasher.Sum(nil)[:8]))
r := rand.New(rand.NewSource(seed))
for i := 0; i < flairCount; i++ {
awards = awards + PersonalFlairPool[r.Intn(len(PersonalFlairPool))]
}
return awards
}
func (nara *Nara) IsInHarmony(soulStr string) bool {
if soulStr == "" {
return false
}
soul, err := identity.ParseSoul(soulStr)
if err != nil {
return false
}
return identity.ValidateBond(soul, nara.Name)
}
func (ln *LocalNara) LicensePlate() string {
barrio := ln.getMeObservation().ClusterEmoji
return barrio
}
func isRaspberryPi() bool {
content, err := os.ReadFile("/proc/cpuinfo")
if err != nil {
return false
}
return strings.Contains(string(content), "Raspberry Pi")
}
func isNixOs() bool {
_, err := os.Stat("/etc/nixos")
nix_does_not_exist := os.IsNotExist(err)
return !nix_does_not_exist
}
func isKubernetes() bool {
return (os.Getenv("KUBERNETES_SERVICE_HOST") != "")
}