TogetherCrew / operations

This repository houses a collection of code artifacts, including Github actions, Github workflows, and essential docker-compose files. These resources are instrumental in facilitating efficient and automated staging and production deployments.
1 stars 0 forks source link

Twitter: Task Overview #56

Open cyri113 opened 1 year ago

cyri113 commented 1 year ago

Overview

The Web3 Foundation has contracted TogetherCrew to deliver a Twitter Dashboard for monitoring community health.

High Level Solution

Workflow

sequenceDiagram
    title Twitter Integration

    actor user
    participant frontend
    participant api
    participant rabbit-mq
    participant twitter-bot-server
    participant twitter-bot-redis
    participant twitter-bot-worker
    participant twitter-analyzer-server
    participant twitter-analyzer-redis
    participant twitter-analyzer-worker
    participant twitter

    user -->> frontend: Goes to /twitter
    frontend -->>+api: Authenticate using Twitter
    api -->>+twitter: Authenticate
    twitter -->>-api: Response
    api -->>-frontend: Authenticated

    frontend -->> frontend: Redirect to /twitter/:handle

    frontend -->>+api: GET /twitter/:handle/refresh
    api -->> rabbit-mq: Publish(Queue.TWITTER_BOT, Event.TWITTER_BOT.EXTRACT)
    api -->>- frontend: Response (SagaId)
    frontend --> api: Subscribe to socket /saga/:sagaId

    rabbit-mq -->> twitter-bot-server: Subscribe(Queue.TWITTER_BOT, Event.TWITTER_BOT.EXTRACT)
    twitter-bot-server -->> twitter-bot-redis: Enqueue Job
    twitter-bot-redis -->>+twitter-bot-worker: Dequeue Job
    twitter-bot-worker -->> twitter-bot-worker: Run extraction script
    twitter-bot-worker -->>-rabbit-mq: Publish(Queue.TWITTER_ANALYZER, Event.TWITTER_ANALYZER.RUN)

    rabbit-mq -->> twitter-analyzer-server: Subscribe(Queue.TWITTER_ANALYZER, Event.TWITTER_ANALYZER.RUN)
    twitter-analyzer-server -->> twitter-analyzer-redis: Enqueue Job
    twitter-analyzer-redis -->>+twitter-analyzer-worker: Dequeue Job
    twitter-analyzer-worker -->> twitter-analyzer-worker: Run analytics script
    twitter-analyzer-worker -->>-rabbit-mq: Publish(Queue.TWITTER_BOT, Event.TWITTER_BOT.SEND_MESSAGE)

    rabbit-mq -->> twitter-bot-server: Subscribe(Queue.TWITTER_BOT, Event.TWITTER_BOT.SEND_MESSAGE)
    twitter-bot-server -->> twitter-bot-redis: Enqueue Job
    twitter-bot-redis -->> twitter-bot-worker: Dequeue Job
    twitter-bot-worker -->>+ twitter: Send message
    twitter -->>- twitter-bot-worker: Response

    frontend -->>+ api: GET /twitter/:handle/followers
    api -->>- frontend: Response
    frontend -->>+ api: GET /twitter/:handle/posts
    api -->>- frontend: Response
    frontend -->>+ api: GET /twitter/:handle/metrics
    api -->>- frontend: Response

By Service

api

broker libraries (py + ts)

twitter-bot

based on python-service

server

worker

twitter-analyzer

based on python-service

server

frontend

amindadgar commented 1 year ago

We've defined a base event for bots which is FETCH. Isn't it better to use the term FETCH instead of EXTRACT for TWITTER_BOT?