Monorepo for Tangled — https://tangled.org
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 254 lines 6.7 kB view raw
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.PullComment, mentions []syntax.DID) { 90 err := n.client.Enqueue(posthog.Capture{ 91 DistinctId: comment.OwnerDid, 92 Event: "new_pull_comment", 93 Properties: posthog.Properties{ 94 "repo_at": comment.RepoAt, 95 "pull_id": comment.PullId, 96 "mentions": mentions, 97 }, 98 }) 99 if err != nil { 100 log.Println("failed to enqueue posthog event:", err) 101 } 102} 103 104func (n *posthogNotifier) NewPullClosed(ctx context.Context, pull *models.Pull) { 105 err := n.client.Enqueue(posthog.Capture{ 106 DistinctId: pull.OwnerDid, 107 Event: "pull_closed", 108 Properties: posthog.Properties{ 109 "repo_at": pull.RepoAt, 110 "pull_id": pull.PullId, 111 }, 112 }) 113 if err != nil { 114 log.Println("failed to enqueue posthog event:", err) 115 } 116} 117 118func (n *posthogNotifier) NewFollow(ctx context.Context, follow *models.Follow) { 119 err := n.client.Enqueue(posthog.Capture{ 120 DistinctId: follow.UserDid, 121 Event: "follow", 122 Properties: posthog.Properties{"subject": follow.SubjectDid}, 123 }) 124 if err != nil { 125 log.Println("failed to enqueue posthog event:", err) 126 } 127} 128 129func (n *posthogNotifier) DeleteFollow(ctx context.Context, follow *models.Follow) { 130 err := n.client.Enqueue(posthog.Capture{ 131 DistinctId: follow.UserDid, 132 Event: "unfollow", 133 Properties: posthog.Properties{"subject": follow.SubjectDid}, 134 }) 135 if err != nil { 136 log.Println("failed to enqueue posthog event:", err) 137 } 138} 139 140func (n *posthogNotifier) UpdateProfile(ctx context.Context, profile *models.Profile) { 141 err := n.client.Enqueue(posthog.Capture{ 142 DistinctId: profile.Did, 143 Event: "edit_profile", 144 }) 145 if err != nil { 146 log.Println("failed to enqueue posthog event:", err) 147 } 148} 149 150func (n *posthogNotifier) DeleteString(ctx context.Context, did, rkey string) { 151 err := n.client.Enqueue(posthog.Capture{ 152 DistinctId: did, 153 Event: "delete_string", 154 Properties: posthog.Properties{"rkey": rkey}, 155 }) 156 if err != nil { 157 log.Println("failed to enqueue posthog event:", err) 158 } 159} 160 161func (n *posthogNotifier) EditString(ctx context.Context, string *models.String) { 162 err := n.client.Enqueue(posthog.Capture{ 163 DistinctId: string.Did.String(), 164 Event: "edit_string", 165 Properties: posthog.Properties{"rkey": string.Rkey}, 166 }) 167 if err != nil { 168 log.Println("failed to enqueue posthog event:", err) 169 } 170} 171 172func (n *posthogNotifier) NewString(ctx context.Context, string *models.String) { 173 err := n.client.Enqueue(posthog.Capture{ 174 DistinctId: string.Did.String(), 175 Event: "new_string", 176 Properties: posthog.Properties{"rkey": string.Rkey}, 177 }) 178 if err != nil { 179 log.Println("failed to enqueue posthog event:", err) 180 } 181} 182 183func (n *posthogNotifier) Clone(ctx context.Context, repo *models.Repo) { 184 err := n.client.Enqueue(posthog.Capture{ 185 DistinctId: repo.Did, 186 Event: "clone", 187 Properties: posthog.Properties{"repo": repo.Name, "repo_at": repo.RepoAt()}, 188 }) 189 if err != nil { 190 log.Println("failed to enqueue posthog event:", err) 191 } 192} 193 194func (n *posthogNotifier) NewIssueComment(ctx context.Context, comment *models.IssueComment, mentions []syntax.DID) { 195 err := n.client.Enqueue(posthog.Capture{ 196 DistinctId: comment.Did, 197 Event: "new_issue_comment", 198 Properties: posthog.Properties{ 199 "issue_at": comment.IssueAt, 200 "mentions": mentions, 201 }, 202 }) 203 if err != nil { 204 log.Println("failed to enqueue posthog event:", err) 205 } 206} 207 208func (n *posthogNotifier) NewIssueState(ctx context.Context, actor syntax.DID, issue *models.Issue) { 209 var event string 210 if issue.Open { 211 event = "issue_reopen" 212 } else { 213 event = "issue_closed" 214 } 215 err := n.client.Enqueue(posthog.Capture{ 216 DistinctId: issue.Did, 217 Event: event, 218 Properties: posthog.Properties{ 219 "repo_at": issue.RepoAt.String(), 220 "actor": actor, 221 "issue_id": issue.IssueId, 222 }, 223 }) 224 if err != nil { 225 log.Println("failed to enqueue posthog event:", err) 226 } 227} 228 229func (n *posthogNotifier) NewPullState(ctx context.Context, actor syntax.DID, pull *models.Pull) { 230 var event string 231 switch pull.State { 232 case models.PullClosed: 233 event = "pull_closed" 234 case models.PullOpen: 235 event = "pull_reopen" 236 case models.PullMerged: 237 event = "pull_merged" 238 default: 239 log.Println("posthog: unexpected new PR state:", pull.State) 240 return 241 } 242 err := n.client.Enqueue(posthog.Capture{ 243 DistinctId: pull.OwnerDid, 244 Event: event, 245 Properties: posthog.Properties{ 246 "repo_at": pull.RepoAt, 247 "pull_id": pull.PullId, 248 "actor": actor, 249 }, 250 }) 251 if err != nil { 252 log.Println("failed to enqueue posthog event:", err) 253 } 254}