+61
cmd/bodega/main.go
+61
cmd/bodega/main.go
···
1
+
package main
2
+
3
+
import (
4
+
"os"
5
+
6
+
"github.com/ClickHouse/clickhouse-go/v2"
7
+
"github.com/urfave/cli/v2"
8
+
)
9
+
10
+
func main() {
11
+
app := cli.App{
12
+
Name: "bodega",
13
+
Action: run,
14
+
Flags: []cli.Flag{
15
+
&cli.StringFlag{
16
+
Name: "clickhouse-addr",
17
+
EnvVars: []string{"PHOTOCOPY_CLICKHOUSE_ADDR"},
18
+
Required: true,
19
+
},
20
+
&cli.StringFlag{
21
+
Name: "clickhouse-database",
22
+
EnvVars: []string{"PHOTOCOPY_CLICKHOUSE_DATABASE"},
23
+
Required: true,
24
+
},
25
+
&cli.StringFlag{
26
+
Name: "clickhouse-user",
27
+
EnvVars: []string{"PHOTOCOPY_CLICKHOUSE_USER"},
28
+
Value: "default",
29
+
},
30
+
&cli.StringFlag{
31
+
Name: "clickhouse-pass",
32
+
EnvVars: []string{"PHOTOCOPY_CLICKHOUSE_PASS"},
33
+
Required: true,
34
+
},
35
+
},
36
+
}
37
+
38
+
app.Run(os.Args)
39
+
}
40
+
41
+
var run = func(cmd *cli.Context) error {
42
+
conn, err := clickhouse.Open(&clickhouse.Options{
43
+
Addr: []string{cmd.String("clickhouse-addr")},
44
+
Auth: clickhouse.Auth{
45
+
Database: cmd.String("clickhouse-database"),
46
+
Username: cmd.String("clickhouse-user"),
47
+
Password: cmd.String("clickhouse-pass"),
48
+
},
49
+
})
50
+
if err != nil {
51
+
return err
52
+
}
53
+
defer conn.Close()
54
+
55
+
var entries []ClickhousePLCEntry
56
+
if err := conn.Select(cmd.Context, &entries, "SELECT..."); err != nil {
57
+
return err
58
+
}
59
+
60
+
return nil
61
+
}
+28
cmd/bodega/plc_models.go
+28
cmd/bodega/plc_models.go
···
1
+
package main
2
+
3
+
import (
4
+
"time"
5
+
)
6
+
7
+
type ClickhousePLCEntry struct {
8
+
Did string `ch:"did"`
9
+
Cid string `ch:"cid"`
10
+
Nullified bool `ch:"nullified"`
11
+
CreatedAt time.Time `ch:"created_at"`
12
+
PlcOpSig string `ch:"plc_op_sig"`
13
+
PlcOpPrev string `ch:"plc_op_prev"`
14
+
PlcOpType string `ch:"plc_op_type"`
15
+
PlcOpServices []string `ch:"plc_op_services"`
16
+
PlcOpAlsoKnownAs []string `ch:"plc_op_also_known_as"`
17
+
PlcOpRotationKeys []string `ch:"plc_op_rotation_keys"`
18
+
PlcTombSig string `ch:"plc_tomb_sig"`
19
+
PlcTombPrev string `ch:"plc_tomb_prev"`
20
+
PlcTombType string `ch:"plc_tomb_type"`
21
+
LegacyOpSig string `ch:"legacy_op_sig"`
22
+
LegacyOpPrev string `ch:"legacy_op_prev"`
23
+
LegacyOpType string `ch:"legacy_op_type"`
24
+
LegacyOpHandle string `ch:"legacy_op_handle"`
25
+
LegacyOpService string `ch:"legacy_op_service"`
26
+
LegacyOpSigningKey string `ch:"legacy_op_signing_key"`
27
+
LegacyOpRecoveryKey string `ch:"legacy_op_recovery_key"`
28
+
}
+5
plc_models.go
+5
plc_models.go
···
137
137
che.PlcOpPrev = *pop.Prev
138
138
}
139
139
che.PlcOpType = pop.Type
140
+
services := []string{}
141
+
for _, s := range pop.Services {
142
+
services = append(services, s.Endpoint)
143
+
}
144
+
che.PlcOpServices = services
140
145
che.PlcOpAlsoKnownAs = pop.AlsoKnownAs
141
146
che.PlcOpRotationKeys = pop.RotationKeys
142
147
if e.Operation.PLCOperation.Services == nil {