diff --git a/.github/workflows/developer_onboarding_notification.yml b/.github/workflows/developer_onboarding_notification.yml new file mode 100644 index 0000000000..0ed44fca48 --- /dev/null +++ b/.github/workflows/developer_onboarding_notification.yml @@ -0,0 +1,116 @@ +name: Celebrating Contributions + +on: + pull_request_target: + types: [closed] + +permissions: + pull-requests: write + +jobs: + comment_on_merged_pull_request: + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Set Environment Variables + env: + AUTHOR: ${{ github.event.pull_request.user.login }} + REPO: ${{ github.event.repository.name }} + OWNER: ${{ github.event.repository.owner.login }} + run: | + echo "AUTHOR=${AUTHOR}" >> $GITHUB_ENV + echo "REPO=${REPO}" >> $GITHUB_ENV + echo "OWNER=${OWNER}" >> $GITHUB_ENV + + - name: Count Merged Pull Requests + id: count_merged_pull_requests + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + try { + const author = process.env.AUTHOR; + const repo = process.env.REPO; + const owner = process.env.OWNER; + const { data } = await github.rest.search.issuesAndPullRequests({ + q: `repo:${owner}/${repo} type:pr state:closed author:${author}` + }); + const prCount = data.items.filter(pr => pr.pull_request.merged_at).length; + core.exportVariable('PR_COUNT', prCount); + } catch (error) { + core.setFailed(`Error counting merged pull requests: ${error.message}`); + } + + - name: Comment on the Merged Pull Request + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + try { + const prCount = parseInt(process.env.PR_COUNT); + const author = process.env.AUTHOR; + const mention = 'talboren'; + const prNumber = context.payload.pull_request.number; + const repo = process.env.REPO; + + function getRandomEmoji() { + const emojis = ['🎉', '🚀', '💪', '🌟', '🏆', '🎊', '🔥', '👏', '🌈', '🚂']; + return emojis[Math.floor(Math.random() * emojis.length)]; + } + + function getMessage(count) { + const emoji = getRandomEmoji(); + switch(count) { + case 1: + return `${emoji} **Fantastic work @${author}!** Your very first PR to ${repo} has been merged! 🎉🥳\n\n` + + `You've just taken your first step into open-source, and we couldn't be happier to have you onboard. 🙌\n` + + `If you're feeling adventurous, why not dive into another issue and keep contributing? The community would love to see more from you! 🚀\n\n` + + `For any support, feel free to reach out to the developer onboarding lead: @${mention}. Happy coding! 👩‍💻👨‍💻`; + case 2: + return `${emoji} **Well done @${author}!** Two PRs merged already! 🎉🥳\n\n` + + `With your second PR, you're on a roll, and your contributions are already making a difference. 🌟\n` + + `Looking forward to seeing even more contributions from you. The developer onboarding lead: @${mention} is here if you need any help! Keep up the great work! 🚀`; + case 3: + return `${emoji} **You're on fire, @${author}!** Three PRs merged and counting! 🔥🎉\n\n` + + `Your consistent contributions are truly impressive. You're becoming a valued member of our community! 💖\n` + + `Have you considered taking on some more challenging issues? We'd love to see what you can do! 💪\n\n` + + `Remember, @${mention} is always here to support you. Keep blazing that trail! 🚀`; + case 5: + return `${emoji} **High five, @${author}!** You've hit the incredible milestone of 5 merged PRs! 🖐️✨\n\n` + + `Your dedication to ${repo} is outstanding. You're not just contributing code; you're shaping the future of this project! 🌠\n` + + `We'd love to hear your thoughts on the project. Any ideas for new features or improvements? 🤔\n\n` + + `@${mention} and the whole team applaud your efforts. You're a superstar! 🌟`; + case 10: + return `${emoji} **Double digits, @${author}!** 10 merged PRs is a massive achievement! 🏆🎊\n\n` + + `Your impact on ${repo} is undeniable. You've become a pillar of our community! 🏛️\n` + + `We'd be thrilled to have you take on a mentorship role for newer contributors. Interested? 🧑‍🏫\n\n` + + `@${mention} and everyone here are in awe of your contributions. You're an open source hero! 🦸‍♀️🦸‍♂️`; + default: + if (count > 10) { + return `${emoji} **Incredible, @${author}!** You've merged your ${count}th PR! 🎯🎊\n\n` + + `Your ongoing commitment to ${repo} is truly remarkable. You're a driving force in our community! 🚀\n` + + `Your contributions are helping to shape the future of this project. What exciting features or improvements do you envision next? 🔮\n\n` + + `@${mention} and the entire team are grateful for your dedication. You're an inspiration to us all! 💫`; + } else { + return `${emoji} **Great job, @${author}!** You've merged your ${count}th PR! 🎊\n\n` + + `Your contributions to ${repo} are making a real difference. Keep up the fantastic work! 💪\n` + + `Remember, every PR counts and helps improve the project. What will you tackle next? 🤔\n\n` + + `@${mention} is here if you need any guidance. Onward and upward! 🚀`; + } + } + } + + const message = getMessage(prCount); + + await github.rest.issues.createComment({ + owner: process.env.OWNER, + repo: process.env.REPO, + issue_number: prNumber, + body: message + }); + } catch (error) { + core.setFailed(`Error creating comment: ${error.message}`); + } \ No newline at end of file diff --git a/docs/mint.json b/docs/mint.json index d1518d4ddf..2504bd46e0 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -107,84 +107,97 @@ { "group": "Supported Providers", "pages": [ - "providers/documentation/aks-provider", - "providers/documentation/appdynamics-provider", - "providers/documentation/axiom-provider", - "providers/documentation/azuremonitoring-provider", - "providers/documentation/centreon-provider", - "providers/documentation/clickhouse-provider", - "providers/documentation/cloudwatch-provider", - "providers/documentation/console-provider", - "providers/documentation/coralogix-provider", - "providers/documentation/datadog-provider", - "providers/documentation/discord-provider", - "providers/documentation/elastic-provider", - "providers/documentation/gcpmonitoring-provider", - "providers/documentation/github_workflows_provider", - "providers/documentation/gitlab-provider", - "providers/documentation/gitlabpipelines-provider", - "providers/documentation/google_chat-provider", - "providers/documentation/grafana-provider", - "providers/documentation/grafana_incident-provider", - "providers/documentation/grafana_oncall-provider", - "providers/documentation/http-provider", - "providers/documentation/ilert-provider", - "providers/documentation/incidentio-provider", - "providers/documentation/incidentmanager-provider", - "providers/documentation/jira-provider", - "providers/documentation/jira-on-prem-provider", - "providers/documentation/kibana-provider", - "providers/documentation/kubernetes-provider", - "providers/documentation/linear_provider", - "providers/documentation/linearb-provider", - "providers/documentation/mailchimp-provider", - "providers/documentation/mattermost-provider", - "providers/documentation/microsoft-planner-provider", - "providers/documentation/mock-provider", - "providers/documentation/mongodb-provider", - "providers/documentation/mysql-provider", - "providers/documentation/mailgun-provider", - "providers/documentation/netdata-provider", - "providers/documentation/new-relic-provider", - "providers/documentation/ntfy-provider", - "providers/documentation/openobserve-provider", - "providers/documentation/openshift-provider", - "providers/documentation/opsgenie-provider", - "providers/documentation/pagerduty-provider", - "providers/documentation/pagertree-provider", - "providers/documentation/pingdom-provider", - "providers/documentation/planner-provider", - "providers/documentation/postgresql-provider", - "providers/documentation/pushover-provider", - "providers/documentation/quickchart-provider", - "providers/documentation/redmine-provider", - "providers/documentation/resend-provider", - "providers/documentation/rollbar-provider", - "providers/documentation/sendgrid-provider", - "providers/documentation/sentry-provider", - "providers/documentation/signalfx-provider", - "providers/documentation/signl4-provider", - "providers/documentation/site24x7-provider", - "providers/documentation/slack-provider", - "providers/documentation/snowflake-provider", - "providers/documentation/smtp-provider", - "providers/documentation/splunk-provider", - "providers/documentation/squadcast-provider", - "providers/documentation/ssh-provider", - "providers/documentation/statuscake-provider", - "providers/documentation/sumologic-provider", - "providers/documentation/teams-provider", - "providers/documentation/telegram-provider", - "providers/documentation/template", - "providers/documentation/trello-provider", - "providers/documentation/twilio-provider", - "providers/documentation/uptimekuma-provider", - "providers/documentation/victoriametrics-provider", - "providers/documentation/webhook-provider", - "providers/documentation/websocket-provider", - "providers/documentation/zabbix-provider", - "providers/documentation/zenduty-provider" - ] + "providers/documentation/aks-provider", + "providers/documentation/appdynamics-provider", + "providers/documentation/auth0-provider", + "providers/documentation/axiom-provider", + "providers/documentation/azuremonitoring-provider", + "providers/documentation/bash-provider", + "providers/documentation/bigquery-provider", + "providers/documentation/centreon-provider", + "providers/documentation/clickhouse-provider", + "providers/documentation/cloudwatch-provider", + "providers/documentation/console-provider", + "providers/documentation/coralogix-provider", + "providers/documentation/datadog-provider", + "providers/documentation/discord-provider", + "providers/documentation/dynatrace-provider", + "providers/documentation/elastic-provider", + "providers/documentation/gcpmonitoring-provider", + "providers/documentation/github-provider", + "providers/documentation/github_workflows_provider", + "providers/documentation/gitlab-provider", + "providers/documentation/gitlabpipelines-provider", + "providers/documentation/gke-provider", + "providers/documentation/google_chat-provider", + "providers/documentation/grafana-provider", + "providers/documentation/grafana_incident-provider", + "providers/documentation/grafana_oncall-provider", + "providers/documentation/http-provider", + "providers/documentation/ilert-provider", + "providers/documentation/incidentio-provider", + "providers/documentation/incidentmanager-provider", + "providers/documentation/jira-on-prem-provider", + "providers/documentation/jira-provider", + "providers/documentation/kafka-provider", + "providers/documentation/keep-provider", + "providers/documentation/kibana-provider", + "providers/documentation/kubernetes-provider", + "providers/documentation/linear_provider", + "providers/documentation/linearb-provider", + "providers/documentation/mailchimp-provider", + "providers/documentation/mailgun-provider", + "providers/documentation/mattermost-provider", + "providers/documentation/microsoft-planner-provider", + "providers/documentation/mock-provider", + "providers/documentation/mongodb-provider", + "providers/documentation/mysql-provider", + "providers/documentation/netdata-provider", + "providers/documentation/new-relic-provider", + "providers/documentation/ntfy-provider", + "providers/documentation/openobserve-provider", + "providers/documentation/openshift-provider", + "providers/documentation/opsgenie-provider", + "providers/documentation/pagerduty-provider", + "providers/documentation/pagertree-provider", + "providers/documentation/parseable-provider", + "providers/documentation/pingdom-provider", + "providers/documentation/planner-provider", + "providers/documentation/postgresql-provider", + "providers/documentation/prometheus-provider", + "providers/documentation/pushover-provider", + "providers/documentation/python-provider", + "providers/documentation/quickchart-provider", + "providers/documentation/redmine-provider", + "providers/documentation/resend-provider", + "providers/documentation/rollbar-provider", + "providers/documentation/sendgrid-provider", + "providers/documentation/sentry-provider", + "providers/documentation/service-now-provider", + "providers/documentation/signalfx-provider", + "providers/documentation/signl4-provider", + "providers/documentation/site24x7-provider", + "providers/documentation/slack-provider", + "providers/documentation/smtp-provider", + "providers/documentation/snowflake-provider", + "providers/documentation/splunk-provider", + "providers/documentation/squadcast-provider", + "providers/documentation/ssh-provider", + "providers/documentation/statuscake-provider", + "providers/documentation/sumologic-provider", + "providers/documentation/teams-provider", + "providers/documentation/telegram-provider", + "providers/documentation/template", + "providers/documentation/trello-provider", + "providers/documentation/twilio-provider", + "providers/documentation/uptimekuma-provider", + "providers/documentation/victoriametrics-provider", + "providers/documentation/webhook-provider", + "providers/documentation/websocket-provider", + "providers/documentation/zabbix-provider", + "providers/documentation/zenduty-provider" + ] + } ] }, diff --git a/docs/package-lock.json b/docs/package-lock.json index 6ab682576c..e7c2e35c87 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -1,6 +1,7 @@ { - "name": "docs", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} + "name": "docs", + "lockfileVersion": 3, + "requires": true, + "packages": {} + } + \ No newline at end of file diff --git a/docs/providers/documentation/auth0-provider.mdx b/docs/providers/documentation/auth0-provider.mdx new file mode 100644 index 0000000000..8eb53bc4e0 --- /dev/null +++ b/docs/providers/documentation/auth0-provider.mdx @@ -0,0 +1,56 @@ +--- +title: "Auth0" +sidebarTitle: "Auth0 Provider" +description: "Auth0 provider allows interaction with Auth0 APIs for authentication and user management." +--- + +## Inputs + +- `client_id`: str : The client ID for the Auth0 application. +- `client_secret`: str : The client secret for the Auth0 application. +- `audience`: str : The audience for the API authorization request. +- `grant_type`: str : The type of authorization grant requested (e.g., `client_credentials`). + +## Outputs + +- `access_token`: The access token issued by Auth0 for authenticated requests. +- `expires_in`: The time in seconds before the access token expires. +- `token_type`: The type of token, typically `Bearer`. + +## Authentication Parameters + +To authenticate with Auth0, the following parameters are needed: +- **client_id**: The unique identifier for your Auth0 application. +- **client_secret**: A secret associated with your application, used for secure communication. +- **audience**: Defines the API resources you're trying to access. + +These parameters can be retrieved from your Auth0 dashboard under the application's settings. + +## Connecting with the Provider + +The Auth0 provider connects to both the **Authentication API** and the **Management API**, enabling functionality such as token-based authentication and user management. Depending on your needs, you can: +- Use the **Authentication API** to obtain access tokens, manage user profiles, or handle multi-factor authentication. +- Use the **Management API** to automate the configuration of your Auth0 environment, register applications, manage users, and more. + +## Example of usage + +```yaml +workflow: + id: auth0-example + description: Auth0 example + triggers: + - type: manual + actions: + - name: auth0 + provider: + type: auth0 + config: "{{ providers.auth0config }}" + with: + client_id: "{{ secrets.auth0_client_id }}" + client_secret: "{{ secrets.auth0_client_secret }}" + audience: "https://api.example.com" + grant_type: "client_credentials" + +##Usefull Links +-[Auth0 API Documentation](https://auth0.com/docs/api) +-[Auth0 as an authentication method for keep](https://docs.keephq.dev/deployment/authentication/auth0-auth) \ No newline at end of file diff --git a/docs/providers/documentation/bash-provider.mdx b/docs/providers/documentation/bash-provider.mdx new file mode 100644 index 0000000000..b13850a50d --- /dev/null +++ b/docs/providers/documentation/bash-provider.mdx @@ -0,0 +1,47 @@ +--- +title: "Bash" +sidebarTitle: "Bash Provider" +description: "Bash provider allows executing Bash commands in a workflow, with a limitation for cloud execution." +--- + +## Inputs + +- `script`: str : The Bash script or command to execute. + +## Outputs + +- `stdout`: The standard output from the executed Bash command. +- `stderr`: The standard error output from the executed Bash command (if any). +- `exit_code`: The exit code of the Bash command. + +## Authentication Parameters + +_None required for local execution of Bash scripts._ + +## Connecting with the Provider + +The Bash provider allows you to run Bash commands or scripts in your workflow. You can pass in any valid Bash command, and it will be executed in a local environment. + +### **Cloud Limitation** +This provider is disabled for cloud environments and can only be used in local or self-hosted environments. + +## Example of usage + +```yaml +workflow: + id: bash-example + description: Bash example + triggers: + - type: manual + actions: + - name: bash + provider: + type: bash + config: "{{ providers.bashtest }}" + with: + script: | + echo "Hello, World!" + ls -l + +## Usefull Links +-[Bash Documentation](https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html) \ No newline at end of file diff --git a/docs/providers/documentation/bigquery-provider.mdx b/docs/providers/documentation/bigquery-provider.mdx new file mode 100644 index 0000000000..d3750cab80 --- /dev/null +++ b/docs/providers/documentation/bigquery-provider.mdx @@ -0,0 +1,47 @@ +--- +title: "BigQuery" +sidebarTitle: "BigQuery Provider" +description: "BigQuery provider allows interaction with Google BigQuery for querying and managing datasets." +--- + +## Inputs + +- `query`: str : The SQL query to execute against the BigQuery dataset +- `dataset`: str : The name of the dataset in BigQuery to use for the query +- `project_id`: str : The Google Cloud project ID where the BigQuery dataset is located + +## Outputs + +- `result`: The results of the executed query, returned as a list of dictionaries. + +## Authentication Parameters + +- `service_account_key`: JSON key file for the Google Cloud service account with permissions to access BigQuery. + +## Connecting with the Provider + +1. Create a Google Cloud project and enable the BigQuery API. +2. Create a service account in your Google Cloud project and download the JSON key file. +3. Share the necessary datasets with the service account. +4. Configure your provider using the `service_account_key`, `project_id`, and `dataset`. + +## Example of usage + +```yaml +workflow: + id: bigquery-example + description: BigQuery example + triggers: + - type: manual + actions: + - name: bigquery + provider: + type: bigquery + config: "{{ providers.bigquerytest }}" + with: + query: "SELECT * FROM `my_dataset.my_table` WHERE condition = 'value'" + dataset: "my_dataset" + project_id: "my_project_id" + +##Usefull Links +-[BigQuery Documentation](https://cloud.google.com/bigquery/docs) \ No newline at end of file diff --git a/docs/providers/documentation/dynatrace-provider.mdx b/docs/providers/documentation/dynatrace-provider.mdx new file mode 100644 index 0000000000..3be5038c91 --- /dev/null +++ b/docs/providers/documentation/dynatrace-provider.mdx @@ -0,0 +1,48 @@ +--- +title: "Dynatrace" +sidebarTitle: "Dynatrace Provider" +description: "Dynatrace provider allows integration with Dynatrace for monitoring, alerting, and collecting metrics." +--- + +## Inputs + +- `metric_key`: str : The key of the Dynatrace metric to query. +- `time_range`: str (optional) : Time range for the query (e.g., `last30mins`, `last24hours`, etc.) +- `filters`: dict (optional) : Filters to apply to the Dynatrace query (e.g., entityId, host). + +## Outputs + +- `result`: The result of the Dynatrace metric query, returned in a JSON format. + +## Authentication Parameters + +- `api_token`: Dynatrace API token required to authenticate requests. +- `dynatrace_url`: URL of the Dynatrace environment (e.g., `https://.live.dynatrace.com`). + +## Connecting with the Provider + +1. Log in to your Dynatrace account and navigate to "Settings" → "Integration" → "Dynatrace API." +2. Generate an API token with appropriate permissions (e.g., Read metrics). +3. Get your environment's Dynatrace URL. +4. Configure the Dynatrace provider using the API token and Dynatrace URL. + +## Example of usage + +```yaml +workflow: + id: dynatrace-example + description: Dynatrace example + triggers: + - type: manual + actions: + - name: dynatrace + provider: + type: dynatrace + config: "{{ providers.dynatracetest }}" + with: + metric_key: "builtin:host.cpu.usage" + time_range: "last24hours" + filters: + entityId: "HOST-12345" +## Useful Links +-[Dynatrace API Documentation](https://docs.dynatrace.com/docs/dynatrace-api) \ No newline at end of file diff --git a/docs/providers/documentation/github-provider.mdx b/docs/providers/documentation/github-provider.mdx new file mode 100644 index 0000000000..425fd09f7c --- /dev/null +++ b/docs/providers/documentation/github-provider.mdx @@ -0,0 +1,50 @@ +--- +title: "GitHub" +sidebarTitle: "GitHub Provider" +description: "GitHub provider allows integration with GitHub for managing repositories, issues, pull requests, and more." +--- + +## Inputs + +- `repo`: str : The name of the repository (e.g., `user/repo-name`) +- `action`: str : The action to perform (e.g., `create_issue`, `close_pr`) +- `issue_title`: str (optional) : The title for a new issue (required for `create_issue` action) +- `issue_body`: str (optional) : The body content for the issue (optional but recommended for `create_issue`) +- `pr_number`: int (optional) : The pull request number (required for `close_pr` action) + +## Outputs + +- `result`: The result of the GitHub API call, returned as a dictionary. + +## Authentication Parameters + +- `github_token`: A personal access token (PAT) from GitHub to authenticate API requests. + - You can generate a token at [GitHub Tokens](https://github.com/settings/tokens). + +## Connecting with the Provider + +1. Go to your GitHub account and navigate to **Settings > Developer Settings > Personal Access Tokens**. +2. Generate a token with the required permissions (e.g., `repo`, `workflow`, etc.). +3. Copy the token and provide it as `github_token` in the provider configuration. + +## Example of usage + +```yaml +workflow: + id: github-example + description: GitHub example + triggers: + - type: manual + actions: + - name: github + provider: + type: github + config: "{{ providers.githubtest }}" + with: + repo: "user/repo-name" + action: "create_issue" + issue_title: "New Issue Title" + issue_body: "Description of the issue." + +## Useful Links +-[GitHub REST API Documentation](https://docs.github.com/en/rest?apiVersion=2022-11-28) \ No newline at end of file diff --git a/docs/providers/documentation/gke-provider.mdx b/docs/providers/documentation/gke-provider.mdx new file mode 100644 index 0000000000..416d6301ed --- /dev/null +++ b/docs/providers/documentation/gke-provider.mdx @@ -0,0 +1,48 @@ +--- +title: "GKE" +sidebarTitle: "GKE Provider" +description: "GKE provider allows managing Google Kubernetes Engine clusters and related resources." +--- + +## Inputs + +- `cluster_name`: str : The name of the GKE cluster to manage +- `action`: str : The action to perform on the cluster (e.g., `create`, `delete`, `scale`) +- `node_count`: int (optional) : The number of nodes (used in scaling the cluster) + +## Outputs + +- `status`: The status of the action performed on the GKE cluster, returned as a response message. + +## Authentication Parameters + +- `gcp_credentials`: JSON containing Google Cloud credentials with the necessary permissions to manage GKE clusters. +- `project_id`: Google Cloud project ID where the GKE cluster is deployed. +- `zone`: The zone where the GKE cluster is hosted. + +## Connecting with the Provider + +1. Obtain Google Cloud credentials by following the steps in [Google Cloud's service account guide](https://cloud.google.com/iam/docs/creating-managing-service-account-keys). +2. Ensure your service account has the necessary permissions to manage GKE clusters (`roles/container.admin`). +3. Provide the `gcp_credentials`, `project_id`, and `zone` in your provider configuration. + +## Example of usage + +```yaml +workflow: + id: gke-example + description: GKE example + triggers: + - type: manual + actions: + - name: gke + provider: + type: gke + config: "{{ providers.gketest }}" + with: + cluster_name: "my-cluster" + action: "create" + node_count: 3 + +## Usefull Links +-[Google Kubernetes Engine Documentation](https://cloud.google.com/kubernetes-engine/docs) \ No newline at end of file diff --git a/docs/providers/documentation/kafka-provider.mdx b/docs/providers/documentation/kafka-provider.mdx new file mode 100644 index 0000000000..5c41693d93 --- /dev/null +++ b/docs/providers/documentation/kafka-provider.mdx @@ -0,0 +1,58 @@ +--- +title: "Kafka" +sidebarTitle: "Kafka Provider" +description: "Kafka provider allows integration with Apache Kafka for producing and consuming messages." +--- + +## Inputs + +- `topic`: str : The Kafka topic to produce/consume messages from. +- `message`: str (optional) : The message to send to the Kafka topic when producing (not required for consuming). +- `action`: str : The action to perform (`produce` or `consume`). + +## Outputs + +- `result`: The result of the action. If consuming, this will return the message(s) from the Kafka topic. + +## Authentication Parameters + +- `kafka_broker`: The URL of the Kafka broker (e.g., `localhost:9092` or the broker's public URL). +- `kafka_client_id`: The client ID to authenticate the Kafka producer/consumer. +- `kafka_security_protocol`: (Optional) Security protocol for Kafka (e.g., `PLAINTEXT`, `SSL`, `SASL_SSL`). +- `kafka_sasl_mechanism`: (Optional) SASL mechanism for authentication (e.g., `PLAIN`, `SCRAM-SHA-256`). +- `kafka_username` & `kafka_password`: (Optional) Username and password for SASL authentication if required. + +## Connecting with the Provider + +1. Set up a Kafka broker (or use an existing one) and make sure it is accessible. +2. Get the broker URL (e.g., `localhost:9092` or a remote Kafka service URL). +3. (Optional) If using secure communication, provide the security protocol, SASL mechanism, username, and password. +4. Configure the provider with these parameters. + +## Example of usage + +```yaml +workflow: + id: kafka-example + description: Kafka example + triggers: + - type: manual + actions: + - name: kafka-produce + provider: + type: kafka + config: "{{ providers.kafkatest }}" + with: + topic: "example-topic" + action: "produce" + message: "Hello, Kafka!" + + - name: kafka-consume + provider: + type: kafka + config: "{{ providers.kafkatest }}" + with: + topic: "example-topic" + action: "consume" +## Usefull Links +-[Kafka Clients Documentation](https://kafka.apache.org/documentation/) \ No newline at end of file diff --git a/docs/providers/documentation/keep-provider.mdx b/docs/providers/documentation/keep-provider.mdx new file mode 100644 index 0000000000..059bdd0a08 --- /dev/null +++ b/docs/providers/documentation/keep-provider.mdx @@ -0,0 +1,42 @@ +--- +title: "Keep" +sidebarTitle: "Keep Provider" +description: "Keep provider allows you to query and manage alerts in Keep." +--- + +## Inputs + +- `query`: str : The query to retrieve alerts based on specific criteria. +- `filter`: dict : Optional filters to narrow down the query results. + +## Outputs + +- `alerts`: list : A list of alerts that match the query criteria. + +## Authentication Parameters + +To use the Keep provider, you must authenticate with an API token associated with your Keep account. This token can be generated from your Keep dashboard. + +## Connecting with the Provider + +1. Log in to your Keep account. +2. Navigate to the API section of your account dashboard and generate an API token. +3. Use this token to authenticate when querying alerts via the Keep provider. + +## Example of usage + +```yaml +workflow: + id: keep-example + description: Keep example + triggers: + - type: manual + actions: + - name: keep-query + provider: + type: keep + config: "{{ providers.keeptest }}" + with: + query: "severity:critical" + filter: + status: "open" diff --git a/docs/providers/documentation/parseable-provider.mdx b/docs/providers/documentation/parseable-provider.mdx new file mode 100644 index 0000000000..624a27cf98 --- /dev/null +++ b/docs/providers/documentation/parseable-provider.mdx @@ -0,0 +1,46 @@ +--- +title: "Parseable" +sidebarTitle: "Parseable Provider" +description: "Parseable provider allows integration with Parseable, a tool for collecting and querying logs." +--- + +## Inputs + +- log_message: str: The log message to send to Parseable +- log_level: str (optional): The log level (e.g., `info`, `error`, `warning`) + +## Outputs + +_No information yet, feel free to contribute it using the "Edit this page" link at the bottom of the page._ + +## Authentication Parameters + +- `api_key`: API key for authenticating with Parseable. +- `parseable_url`: The URL of the Parseable instance where logs will be sent. + +## Connecting with the Provider + +1. Obtain an API key from your Parseable instance. +2. Configure your provider using the `api_key` and `parseable_url`. + +## Example of usage + +```yaml +workflow: + id: parseable-example + description: Parseable example + triggers: + - type: manual + actions: + - name: parseable + provider: + type: parseable + config: "{{ providers.parseabletest }}" + with: + log_message: "This is a test log message" + log_level: "info" + + + +## Usefull Links +-[Parseable API Documentation](https://www.parseable.com/docs/api) \ No newline at end of file diff --git a/docs/providers/documentation/prometheus-provider.mdx b/docs/providers/documentation/prometheus-provider.mdx new file mode 100644 index 0000000000..f4bd6e5fb1 --- /dev/null +++ b/docs/providers/documentation/prometheus-provider.mdx @@ -0,0 +1,47 @@ +--- +title: "Prometheus" +sidebarTitle: "Prometheus Provider" +description: "Prometheus provider allows integration with Prometheus for monitoring and alerting purposes." +--- + +## Inputs + +- `query`: str : The Prometheus query to execute +- `time_range`: str (optional) : Time range for the query in Prometheus' duration format (e.g., `1h`, `30m`) + +## Outputs + +- `result`: The result of the Prometheus query, returned in a dictionary format containing the data. + +## Authentication Parameters + +- `prometheus_url`: URL of the Prometheus server where the queries will be executed. +- `api_token`: API token for secure access to Prometheus server (optional if server is open). + +## Connecting with the Provider + +1. Set up a Prometheus server and make sure it's running. +2. Get the `prometheus_url` where your Prometheus instance is accessible. +3. (Optional) Obtain the API token from your Prometheus configuration if it's protected. +4. Provide these values in the provider configuration. + +## Example of usage + +```yaml +workflow: + id: prometheus-example + description: Prometheus example + triggers: + - type: manual + actions: + - name: prometheus + provider: + type: prometheus + config: "{{ providers.prometheustest }}" + with: + query: "up" + time_range: "1h" + +## Useful Links +-[Prometheus Querying API Documentation](https://prometheus.io/docs/prometheus/latest/querying/api/) +-[Prometheus Official Documentation](https://prometheus.io/docs/introduction/overview/) \ No newline at end of file diff --git a/docs/providers/documentation/python-provider.mdx b/docs/providers/documentation/python-provider.mdx new file mode 100644 index 0000000000..fe539366b6 --- /dev/null +++ b/docs/providers/documentation/python-provider.mdx @@ -0,0 +1,48 @@ +--- +title: "Python" +sidebarTitle: "Python Provider" +description: "Python provider allows executing Python code snippets." +--- + +## Inputs + +- `script`: str: Python script to execute + +## Outputs + +- `result`: The output of the Python script + +## Authentication Parameters + +_None required for local execution._ + +## Limitations + +- The Python provider is currently disabled for cloud execution. This means that Python scripts cannot be executed in a cloud environment. +- Users must ensure that the scripts are compatible with the local execution environment. + +## Connecting with the Provider + +The Python provider allows you to run small Python scripts. + +## Example of usage + +```yaml +workflow: + id: python-example + description: Python example + triggers: + - type: manual + actions: + - name: python + provider: + type: python + config: "{{ providers.pythontest }}" + with: + script: | + print("Hello, world!") + + +## Usefull Links + +-[Python Documentation](https://docs.python.org/3/) \ No newline at end of file diff --git a/docs/providers/documentation/service-now-provider.mdx b/docs/providers/documentation/service-now-provider.mdx new file mode 100644 index 0000000000..c517854500 --- /dev/null +++ b/docs/providers/documentation/service-now-provider.mdx @@ -0,0 +1,50 @@ +--- +title: "Service Now" +sidebarTitle: "Service Now Provider" +description: "Service Now provider allows sending notifications, updates, and retrieving topology information from the ServiceNow CMDB." +--- + +## Inputs + +- `content`: str : Message text to send as a notification or update +- `topology_query`: str (optional): A query to retrieve topology information from the ServiceNow CMDB. + +## Outputs + +- `result`: str : The result of the notification or update action. +- `topology`: dict : The topology information retrieved from the CMDB, if a topology query is provided. + +## Authentication Parameters + +The `instance_url` and `api_token` are required for connecting to the ServiceNow instance and performing any actions. + +## Connecting with the Provider + +1. Ensure that the ServiceNow instance is accessible via API. +2. Provide the necessary API credentials (`instance_url` and `api_token`) in the provider configuration. + +## Example of Usage + +```yaml +workflow: + id: service-now-example + description: Service Now example + triggers: + - type: manual + actions: + - name: service-now + provider: + type: service-now + config: "{{ providers.servicenow }}" + with: + content: "Incident update: Issue resolved" + - name: service-now-topology + provider: + type: service-now + config: "{{ providers.servicenow }}" + with: + topology_query: "SELECT * FROM cmdb_ci_server WHERE status='Active'" + + +## Useful Links +- [Service Now API documentation](https://docs.servicenow.com/bundle/xanadu-api-reference/page/build/applications/concept/api-rest.html) \ No newline at end of file diff --git a/docs/providers/overview.mdx b/docs/providers/overview.mdx index 61f5cf7ed3..0888065178 100644 --- a/docs/providers/overview.mdx +++ b/docs/providers/overview.mdx @@ -20,6 +20,102 @@ By leveraging Keep Providers, users are able to deeply integrate Keep with the t } > + + } +/> + + + } +/> + + + } +/> + + + } +/> + + + } +/> + + + } +/> + + + } +/> + + + } +/> + + + } +/> + + + } +/> + + + } +/> + + + } +/> + + {summary} + + if (collapsable) { return ( @@ -65,7 +76,7 @@ function Summary({ - {summary} + {formatedSummary} ); @@ -75,7 +86,7 @@ function Summary({

{title}

{/*TODO: suggest generate summary if it's empty*/} - {summary ?

{summary}

:

No summary yet

} + {summary ?

{formatedSummary}

:

No summary yet

}
); } diff --git a/keep-ui/app/incidents/create-or-update-incident.tsx b/keep-ui/app/incidents/create-or-update-incident.tsx index 1492227061..2ae75422b0 100644 --- a/keep-ui/app/incidents/create-or-update-incident.tsx +++ b/keep-ui/app/incidents/create-or-update-incident.tsx @@ -18,6 +18,9 @@ import { IncidentDto } from "./models"; import { useIncidents } from "utils/hooks/useIncidents"; import { Session } from "next-auth"; import { useUsers } from "utils/hooks/useUsers"; +const ReactQuill = + typeof window === "object" ? require("react-quill") : () => false; +import "react-quill/dist/quill.snow.css"; interface Props { incidentToEdit: IncidentDto | null; @@ -157,6 +160,32 @@ export default function CreateOrUpdateIncident({ return !!incidentName; }; + const formats = [ + "header", + "bold", + "italic", + "underline", + "list", + "bullet", + "link", + "align", + "blockquote", + "code-block", + "color", + ]; + + const modules = { + toolbar: [ + [{ header: "1" }, { header: "2" }], + [{ list: "ordered" }, { list: "bullet" }], + ["bold", "italic", "underline"], + ["link"], + [{ align: [] }], + ["blockquote", "code-block"], // Add quote and code block options to the toolbar + [{ color: [] }], // Add color option to the toolbar + ], + }; + return (
Incident Metadata @@ -173,10 +202,14 @@ export default function CreateOrUpdateIncident({
Summary -