ASP.NET Core Automation Tool

Note that this application is currently closed source thus only a description is provided.

A microservice application that automates the interaction between different SaaS applications that expose a public API . Works similar to Zapier, you have a “producer” and a “consumer”.

  • Producer: Gets data from one SaaS application based on a specific condition (when a new issue is posted on GitHub)
  • Consumer: Uses the data from the producer to automate a specific task (post a message on Slack when a new issue is posted)

The web application exposes the following services:

Connect API
To act on behalf of the user, the application has to store OAuth tokens from the third-party SaaS application.

Task API
It manages the producer and consumer. Below you can see how a call to the endpoint must look like.

{
    "Producer": {
        "Service": "GitHub",
        "Task": "GetAllIssues",
        "Args": [
            4,
            2
        ]
    },
    "Consumer": {
        "Service": "Slack",
        "Task": "ConversationWrite",
        "Args": [
            "C02HQ6KPL4E"
        ],
        "JSON": "",
        "Language": "{{User.Login}} added a new issue called {{Title}} on the {{Repository.HtmlUrl}} repository. More information:{{HtmlUrl}}"
    }
}

The producer defines what service it targets (GitHub), what you want the application to look for (GetAllIssues), and the arguments that the task takes (in this case these are some options the app sends to GitHub when it calls the issues API).

Consumer works the same but it has two extra fields. The JSON field is going to contain the JSON returned by the “producer” API (in this case the GitHub issues API).

The language will contain the message to be posted by the consumer (in this case the message is going to be published on the Slack channel). The application implements a very basic template engine. It has only one role, to let you replace the variables contained between {{ }} with values from the JSON field.

The Task API uses a message queue (RabbitMQ) to communicate with workers.

GitHub/Slack Worker Service
The workers are the ones that execute the tasks (GetAllIssues, ConversationWrite).

It listens and sends data through a message queue. When nothing is available on the queues they just idle.

Everything works in a Docker environment.

Tech stack:

  • ASP.NET Core (Web API and worker service)
  • Entity Framework
  • SQL Server
  • RabbitMQ
  • Docker

Arrow-up