this repo has no description
1package posthog
2
3import (
4 "context"
5 "log"
6
7 "github.com/bluesky-social/indigo/atproto/syntax"
8 "github.com/posthog/posthog-go"
9 "tangled.org/core/appview/models"
10 "tangled.org/core/appview/notify"
11)
12
13type posthogNotifier struct {
14 client posthog.Client
15 notify.BaseNotifier
16}
17
18func NewPosthogNotifier(client posthog.Client) notify.Notifier {
19 return &posthogNotifier{
20 client,
21 notify.BaseNotifier{},
22 }
23}
24
25var _ notify.Notifier = &posthogNotifier{}
26
27func (n *posthogNotifier) NewRepo(ctx context.Context, repo *models.Repo) {
28 err := n.client.Enqueue(posthog.Capture{
29 DistinctId: repo.Did,
30 Event: "new_repo",
31 Properties: posthog.Properties{"repo": repo.Name, "repo_at": repo.RepoAt()},
32 })
33 if err != nil {
34 log.Println("failed to enqueue posthog event:", err)
35 }
36}
37
38func (n *posthogNotifier) NewStar(ctx context.Context, star *models.Star) {
39 err := n.client.Enqueue(posthog.Capture{
40 DistinctId: star.Did,
41 Event: "star",
42 Properties: posthog.Properties{"repo_at": star.RepoAt.String()},
43 })
44 if err != nil {
45 log.Println("failed to enqueue posthog event:", err)
46 }
47}
48
49func (n *posthogNotifier) DeleteStar(ctx context.Context, star *models.Star) {
50 err := n.client.Enqueue(posthog.Capture{
51 DistinctId: star.Did,
52 Event: "unstar",
53 Properties: posthog.Properties{"repo_at": star.RepoAt.String()},
54 })
55 if err != nil {
56 log.Println("failed to enqueue posthog event:", err)
57 }
58}
59
60func (n *posthogNotifier) NewIssue(ctx context.Context, issue *models.Issue, mentions []syntax.DID) {
61 err := n.client.Enqueue(posthog.Capture{
62 DistinctId: issue.Did,
63 Event: "new_issue",
64 Properties: posthog.Properties{
65 "repo_at": issue.RepoAt.String(),
66 "issue_id": issue.IssueId,
67 "mentions": mentions,
68 },
69 })
70 if err != nil {
71 log.Println("failed to enqueue posthog event:", err)
72 }
73}
74
75func (n *posthogNotifier) NewPull(ctx context.Context, pull *models.Pull) {
76 err := n.client.Enqueue(posthog.Capture{
77 DistinctId: pull.OwnerDid,
78 Event: "new_pull",
79 Properties: posthog.Properties{
80 "repo_at": pull.RepoAt,
81 "pull_id": pull.PullId,
82 },
83 })
84 if err != nil {
85 log.Println("failed to enqueue posthog event:", err)
86 }
87}
88
89func (n *posthogNotifier) NewPullComment(ctx context.Context, comment *models.Comment, mentions []syntax.DID) {
90 err := n.client.Enqueue(posthog.Capture{
91 DistinctId: comment.Did.String(),
92 Event: "new_pull_comment",
93 Properties: posthog.Properties{
94 "pull_at": comment.Subject,
95 "mentions": mentions,
96 },
97 })
98 if err != nil {
99 log.Println("failed to enqueue posthog event:", err)
100 }
101}
102
103func (n *posthogNotifier) NewPullClosed(ctx context.Context, pull *models.Pull) {
104 err := n.client.Enqueue(posthog.Capture{
105 DistinctId: pull.OwnerDid,
106 Event: "pull_closed",
107 Properties: posthog.Properties{
108 "repo_at": pull.RepoAt,
109 "pull_id": pull.PullId,
110 },
111 })
112 if err != nil {
113 log.Println("failed to enqueue posthog event:", err)
114 }
115}
116
117func (n *posthogNotifier) NewFollow(ctx context.Context, follow *models.Follow) {
118 err := n.client.Enqueue(posthog.Capture{
119 DistinctId: follow.UserDid,
120 Event: "follow",
121 Properties: posthog.Properties{"subject": follow.SubjectDid},
122 })
123 if err != nil {
124 log.Println("failed to enqueue posthog event:", err)
125 }
126}
127
128func (n *posthogNotifier) DeleteFollow(ctx context.Context, follow *models.Follow) {
129 err := n.client.Enqueue(posthog.Capture{
130 DistinctId: follow.UserDid,
131 Event: "unfollow",
132 Properties: posthog.Properties{"subject": follow.SubjectDid},
133 })
134 if err != nil {
135 log.Println("failed to enqueue posthog event:", err)
136 }
137}
138
139func (n *posthogNotifier) UpdateProfile(ctx context.Context, profile *models.Profile) {
140 err := n.client.Enqueue(posthog.Capture{
141 DistinctId: profile.Did,
142 Event: "edit_profile",
143 })
144 if err != nil {
145 log.Println("failed to enqueue posthog event:", err)
146 }
147}
148
149func (n *posthogNotifier) DeleteString(ctx context.Context, did, rkey string) {
150 err := n.client.Enqueue(posthog.Capture{
151 DistinctId: did,
152 Event: "delete_string",
153 Properties: posthog.Properties{"rkey": rkey},
154 })
155 if err != nil {
156 log.Println("failed to enqueue posthog event:", err)
157 }
158}
159
160func (n *posthogNotifier) EditString(ctx context.Context, string *models.String) {
161 err := n.client.Enqueue(posthog.Capture{
162 DistinctId: string.Did.String(),
163 Event: "edit_string",
164 Properties: posthog.Properties{"rkey": string.Rkey},
165 })
166 if err != nil {
167 log.Println("failed to enqueue posthog event:", err)
168 }
169}
170
171func (n *posthogNotifier) NewString(ctx context.Context, string *models.String) {
172 err := n.client.Enqueue(posthog.Capture{
173 DistinctId: string.Did.String(),
174 Event: "new_string",
175 Properties: posthog.Properties{"rkey": string.Rkey},
176 })
177 if err != nil {
178 log.Println("failed to enqueue posthog event:", err)
179 }
180}
181
182func (n *posthogNotifier) NewIssueComment(ctx context.Context, comment *models.Comment, mentions []syntax.DID) {
183 err := n.client.Enqueue(posthog.Capture{
184 DistinctId: comment.Did.String(),
185 Event: "new_issue_comment",
186 Properties: posthog.Properties{
187 "issue_at": comment.Subject,
188 "mentions": mentions,
189 },
190 })
191 if err != nil {
192 log.Println("failed to enqueue posthog event:", err)
193 }
194}
195
196func (n *posthogNotifier) NewIssueState(ctx context.Context, actor syntax.DID, issue *models.Issue) {
197 var event string
198 if issue.Open {
199 event = "issue_reopen"
200 } else {
201 event = "issue_closed"
202 }
203 err := n.client.Enqueue(posthog.Capture{
204 DistinctId: issue.Did,
205 Event: event,
206 Properties: posthog.Properties{
207 "repo_at": issue.RepoAt.String(),
208 "actor": actor,
209 "issue_id": issue.IssueId,
210 },
211 })
212 if err != nil {
213 log.Println("failed to enqueue posthog event:", err)
214 }
215}
216
217func (n *posthogNotifier) NewPullState(ctx context.Context, actor syntax.DID, pull *models.Pull) {
218 var event string
219 switch pull.State {
220 case models.PullClosed:
221 event = "pull_closed"
222 case models.PullOpen:
223 event = "pull_reopen"
224 case models.PullMerged:
225 event = "pull_merged"
226 default:
227 log.Println("posthog: unexpected new PR state:", pull.State)
228 return
229 }
230 err := n.client.Enqueue(posthog.Capture{
231 DistinctId: pull.OwnerDid,
232 Event: event,
233 Properties: posthog.Properties{
234 "repo_at": pull.RepoAt,
235 "pull_id": pull.PullId,
236 "actor": actor,
237 },
238 })
239 if err != nil {
240 log.Println("failed to enqueue posthog event:", err)
241 }
242}