forked from tangled.org/core
this repo has no description

appview: add posthog to knotstream

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li e9dac7d1 1c8c3ea1

verified
Changed files
+18 -6
appview
+17 -5
appview/state/knotstream.go
···
kc "tangled.sh/tangled.sh/core/knotclient"
"tangled.sh/tangled.sh/core/log"
"tangled.sh/tangled.sh/core/rbac"
+
+
"github.com/posthog/posthog-go"
)
-
func KnotstreamConsumer(c *config.Config, d *db.DB, enforcer *rbac.Enforcer) (*kc.EventConsumer, error) {
+
func KnotstreamConsumer(c *config.Config, d *db.DB, enforcer *rbac.Enforcer, posthog posthog.Client) (*kc.EventConsumer, error) {
knots, err := db.GetCompletedRegistrations(d)
if err != nil {
return nil, err
···
cfg := kc.ConsumerConfig{
Sources: srcs,
-
ProcessFunc: knotstreamIngester(d, enforcer),
+
ProcessFunc: knotstreamIngester(d, enforcer, posthog, c.Core.Dev),
RetryInterval: c.Knotstream.RetryInterval,
MaxRetryInterval: c.Knotstream.MaxRetryInterval,
ConnectionTimeout: c.Knotstream.ConnectionTimeout,
···
return kc.NewEventConsumer(cfg), nil
}
-
func knotstreamIngester(d *db.DB, enforcer *rbac.Enforcer) kc.ProcessFunc {
+
func knotstreamIngester(d *db.DB, enforcer *rbac.Enforcer, posthog posthog.Client, dev bool) kc.ProcessFunc {
return func(source kc.EventSource, msg kc.Message) error {
switch msg.Nsid {
case tangled.GitRefUpdateNSID:
-
return ingestRefUpdate(d, enforcer, source, msg)
+
return ingestRefUpdate(d, enforcer, posthog, dev, source, msg)
case tangled.PipelineNSID:
// TODO
}
···
}
}
-
func ingestRefUpdate(d *db.DB, enforcer *rbac.Enforcer, source kc.EventSource, msg kc.Message) error {
+
func ingestRefUpdate(d *db.DB, enforcer *rbac.Enforcer, pc posthog.Client, dev bool, source kc.EventSource, msg kc.Message) error {
var record tangled.GitRefUpdate
err := json.Unmarshal(msg.EventJson, &record)
if err != nil {
···
}
if err := db.AddPunch(d, punch); err != nil {
return err
+
}
+
+
if !dev {
+
err = pc.Enqueue(posthog.Capture{
+
DistinctId: record.CommitterDid,
+
Event: "git_ref_update",
+
})
+
if err != nil {
+
// non-fatal, TODO: log this
+
}
}
return nil
+1 -1
appview/state/state.go
···
return nil, fmt.Errorf("failed to start jetstream watcher: %w", err)
}
-
knotstream, err := KnotstreamConsumer(config, d, enforcer)
+
knotstream, err := KnotstreamConsumer(config, d, enforcer, posthog)
if err != nil {
return nil, fmt.Errorf("failed to start knotstream consumer: %w", err)
}