Code Monkey home page Code Monkey logo

goalert's Introduction

GoAlert

GoAlert provides on-call scheduling, automated escalations and notifications (like SMS or voice calls) to automatically engage the right person, the right way, and at the right time.

main-screen-updated

Installation

GoAlert is distributed as a single binary with release notes available from the GitHub Releases page. Additionally, images are published on Docker Hub for each release. The latest tag is the most recent release, and nightly is the latest build from the master branch.

See our Getting Started Guide for running GoAlert in a production environment.

Quick Start

# podman
podman run -it --rm -p 8081:8081 goalert/demo

# docker
docker run -it --rm -p 8081:8081 goalert/demo

GoAlert will be running at localhost:8081. You can log in with admin/admin123.

If you're using the demo container for integration testing:

  • A non-admin user is available as user/user1234.
  • You can specify the ENV variable SKIP_SEED=1 to skip the initial seed data step.
  • You can get a session token via curl -XPOST -H 'Referer: http://localhost:8081' -d 'username=admin&password=admin123' 'http://localhost:8081/api/v2/identity/providers/basic?noRedirect=1'.

Contributing

If you'd like to contribute to GoAlert, please see our Contributing Guidelines and the Development Setup Guide.

Please also see our Code of Conduct.

Contact Us

If you need help or have a question, the #goalert Slack channel is available on gophers.slack.com.

To access Gophers Slack and the #goalert channel, you will need an invitation. You request one through the automated process here: https://invite.slack.golangbridge.org/

License

GoAlert is licensed under the Apache License, Version 2.0.

goalert's People

Contributors

alaricwhitney avatar alejandra-martinez avatar allending313 avatar andrewbenington avatar arurao avatar cmarquis avatar dayander avatar dctalbot avatar dependabot-preview[bot] avatar dependabot[bot] avatar ezvu avatar forfold avatar jakegleason avatar julian7 avatar kanish671 avatar katiemsb avatar katy-m avatar lakshmi2107 avatar leyasalazar avatar m17ch avatar mastercactapus avatar nataliekorzh avatar nickhackman avatar pnengchu avatar quynhd07 avatar spencerpauly avatar sudhabindu-apm avatar tony-tvu avatar voninkazo avatar voromahery avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

goalert's Issues

AWS Support for SNS/SQS

Is your feature request related to a problem? Please describe:
A clear and concise description of what the problem is.

Unable to send to AWS

Describe the solution you'd like:
A clear and concise description of what you want to happen.

Post to SNS/SQS for messaging / emails

Describe alternatives you've considered:
A clear and concise description of any alternative solutions or features you've considered.
Cabot

Additional context:
Add any other context or screenshots about the feature request here.

ui: add error dialog support when testing a contact method

Is your feature request related to a problem? Please describe:
Currently, when a user clicks to test their contact method and the mutation fails, no error message is displayed (web/src/app/users/UserContactMethodList.js).

Describe the solution you'd like:
A dialog should be displayed similar to other error dialogs within the application if the user attempts to test their contact method and the mutation fails.

extend OIDC settings

Is your feature request related to a problem? Please describe:

When I tried to connect GoAlert to an internal OIDC provider, I had to realize a couple of issues:

  • our provider doesn't support "email" scope
  • the retrieved ID token doesn't contain profile data (like name or email address)
  • user name and email address is available only through the userinfo endpoint
  • email is under a custom name in userinfo

Describe the solution you'd like:

  • allow custom scopes
  • pull userinfo if required
  • name and email address field names should be configurable

Describe alternatives you've considered:

No real alternatives found. Maintaining our own patch seems like being a burden, not connecting this particular app into OIDC is a waste.

Scheduling granularity

Describe the solution you'd like:
I would like to define business hours for the schedule (e.g. 8am-6pm).
I would also like to define a schedule increment shorter than 1 day that rotates during business hours. (e.g. 60m, 4h)

Rotations: Exclude specific days of week

Is your feature request related to a problem? Please describe:
I need a rotation on weekdays only, currently it's not possible to do that

Describe the solution you'd like:
When creating rotation I would like to specify working days (e.g Mon-Fri) on which rotation should take place. Days out of rotations should have no shift at all

unique colors for assignments and overrides on schedule calendar

Is your feature request related to a problem? Please describe:
As a user of GoAlert, I want to be able to see which shifts on the calendar are overrides, and which are the regular shifts all at a glance. I also want to know which shifts are from differing assignments, so that if I need to change something or if I need to confirm an override is set up, it is easy to see.

Describe the solution you'd like:

  • Override events on the calendar are shown in a different color from the default.
  • An icon (or something other than just the color) also signifies an override, to ensure colorblind individuals can also see the difference.

Additional context:
The query to grab schedule shifts with overrides for the calendar (schedule(id: ID!) -> shifts(start: ISOTimestamp!, end: ISOTimestamp!) within GraphQL) does not include an indicator on the shift object as to whether or not the shift is an override. Additional work is needed here before reflecting this on the UI.

Unable to set day of week for handoff

Describe the Bug:

In the rotations, we see this

Screenshot from 2020-03-28 15-35-24

Then when we try to set the hand off date on the rotation, we keep getting NaN / unset week day.

Screenshot from 2020-03-28 15-36-20

Looking at the console, we see NaN instead of the expected integer value for week day.

Steps to Reproduce:
See above. We try to set the day of week on an existing rotation.

Expected Behavior:
Sets week day.

Observed Behavior:
See above.

Screenshots/Stack Traces:
See above.

Application Version:

v0.24.1

Issue with deploying GoAlert on EKS

I've been having an issue with setting up the service for GoAlert on our Kubernetes cluster running on EKS. The actual deployment manifest deploys fine, as well as the service manifest. The exact issue I am having is that once I deploy the service manifest and it creates an ELB, after awhile the instances show out of service as the health checks fail trying to reach port 8081. Yet if I run a kubectl port-forward using port 8081, I am able to reach the gui on http://localhost:8081 with no problem from my workstation. The other odd thing is that I was able to access a bash shell on a pod within the cluster and run a curl against the GoAlert pod. I was getting connection refused messages.

Not sure if you have encountered anything similar when deploying to k8s. Here are my manifests:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kalert
  namespace: alert
  labels:
    app: kalert
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kalert
  template:
    metadata:
      labels:
        app: kalert
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/role
                operator: NotIn
                values:
                - XXXXX
      containers:
      - image: goalert/goalert
        imagePullPolicy: Always
        name: kalert
        command: ["/bin/sh"]
        args: ["-c", "goalert --db-url postgres://XXXXXXXXXXXXX"]
        ports:
        - containerPort: 8081
          protocol: TCP
apiVersion: v1
kind: Service
metadata:
  name: kalert-gui
  namespace: alert
spec:
  selector:
    app: kalert
  ports:
  - name: kalert
    port: 8081
    targetPort: 8081
    protocol: TCP
  type: LoadBalancer
kubectl describe service kalert-gui --namespace=alert
Name:                     kalert-gui
Namespace:                alert
Labels:                   <none>
Annotations:              <none>
Selector:                 app=kalert
Type:                     LoadBalancer
IP:                       10.100.232.57
LoadBalancer Ingress:     XXXXXXXXXXXXXXXXX.us-east-1.elb.amazonaws.com
Port:                     kalert  8081/TCP
TargetPort:               8081/TCP
NodePort:                 kalert  32369/TCP
Endpoints:                172.24.2.202:8081
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type    Reason                Age   From                Message
  ----    ------                ----  ----                -------
  Normal  EnsuringLoadBalancer  2m2s  service-controller  Ensuring load balancer
  Normal  EnsuredLoadBalancer   119s  service-controller  Ensured load balancer
kubectl get pods --output=wide --namespace=alert
NAME                      READY   STATUS    RESTARTS   AGE   IP             NODE                          NOMINATED NODE
kalert-56bb45cc78-zzq7f   1/1     Running   0          74m   172.24.2.202   ip-172-24-2-15.ec2.internal   <none>

Thanks!

ui: mobile sidebar menu is not keyboard or screen reader accessible

Describe the Bug:
Currently, the sidebar when opened on mobile is not usable when navigating by keyboard or screen reader.

Describe the solution you'd like:

  • Mobile sidebar can be navigated using a keyboard or a screen reader, with default behavior being top to bottom.
  • Background DOM is not accessible while menu is open
  • Nav links are be wrapped in nav tags
  • aria-expanded has been added to mobile menu hamburger button

Adding shift time limit doesn't allow backspace for first character

Describe the Bug:
Time Limit defaults to "14". Backspacing only allows it to backspace to "1". Manually using the arrow button to increase the number works, but then the new number still cannot be backspaced.

Steps to Reproduce:

  1. Go to Schedules->Shifts->Three bars icon
  2. Click on "Time Limit"
  3. Click on "Specify..."
  4. Backspace characters in the input box as far as possible
  5. Increase manually from "1" to "3" with the arrow button
  6. Backspace characters in the input box as far as possible

Expected Behavior:
All characters can be backspaced to produce an empty input box.

Observed Behavior:
The very first character is present in the input box.

Screenshots/Stack Traces:
Screen Shot 2020-06-28 at 10 35 27 PM

Application Version:
$ goalert version Version: v0.24.0 ...

Desktop:

  • OS: MacOS Mojave 10.14.6
  • Browser: Firefox
  • Version: 76.0.1

Perhaps this is intentional to never allow an empty inbox. It seems like more of a nice to have. Any comments on whether or not this should be considered a bug are welcome and I can remove this.

Configure admin username and password with env vars

Problem:
I would like to be able to configure the admin user and password before starting up the Docker container.

Describe the solution you'd like:
The admin user name and password could be configurable via environment variables.

Describe alternatives you've considered:
Maybe an alternate init.sql file could be provided by the user.

Proxy Path

Hello guys,

Is your feature request related to a problem? Please describe:
When i want put a revers-proxy in front, can't user a context (ex: http://@proxy/goalert/)
I use nginx as reverse_proxy

Describe the solution you'd like:
I think, to generate dynamically your path, for take in charge a context root in front.
May be you can reuse --ui-url for that ?

Checkboxes in Firefox are broken

Describe the Bug:
Users currently cannot use alerts checkboxes in Firefox, as it redirects the user to the alert route, rather than checking the list item.

Steps to Reproduce:

  1. Open Firefox
  2. Go to /alerts
  3. Click on checkbox

Expected Behavior:
Boxes are toggled onClick

Observed Behavior:
Users are redirected to alert list item

Role Based Access Controls

All users can modify all/any rotations, schedules, escalation policies, and services . Would like to control who has the ability to make changes and generate notifications.

Have RBAC based on these use cases.

GoAlert Admin -

  • Can have access to goalert functionality.

Service Based Admin -

  • Can create/edit rotations, schedules, escalation policies, and services. Able to add users to rotations, schedules, and escalation policies.
  • Can grant users to Service and all rotations, schedules, and escalation policies associated with the Service.
  • Can generate integration keys, but Service Based Admin only allowed to see them.

Service Based User -

  • Can override schedules. Has read access to all rotations, schedules, and escalation policies for his service. Can generate an alert for his service.

Operators -

  • Can only generate alerts for granted services.

Users/Operators -

  • Can have access to multiple services if granted.

An alternative would be to allow some users the ability to only generate alerts and modify their profile.

proposal: lessen label creation restrictions

Is your feature request related to a problem? Please describe:
As it stands a label, when created, requires a key be created, which must have a prefix and a suffix (both at least 3 letters long), divided by a /. A value to this key is also required for the label to be created.

I feel this hampers the ability for a user to quickly create a label and start organizing their services as such.

The word label has two definitions:

  1. A small piece of paper, fabric, plastic, or similar material attached to an object and giving information about it.
  2. A classifying phrase or name applied to a person or thing, especially one that is inaccurate or restrictive.

By this, what a label should be within GoAlert is a small classifying name attached to a Service that is less restrictive than before.

Describe the solution you'd like:
I propose that we allow the key of a label to allow all standard characters, sans prefixes and suffixes. This ensures that existing service labels are not broken, but opens up the label creation process for a better ease of use by our end users.

What this does is allows the existing frameworks remain in place for teams that would like to use the key as their organization identifier, and the value as their team name. However what this will also do is allow teams to utilize labels in a fashion best suited for their needs. For example, a GoAlert service could have a label with a key of "GoAlert" and a value of "Monitor", or similar.

Out of scope:
This will also allow, in my opinion, searching and filtering to be simplified. Labels for instance could be searched with a query of label="Goalert" which could search across the relevant services for this label. Whether this would an exact match or not could be up for further discussion in a separate issue.

ui: clamp max values in numeric input values

Is your feature request related to a problem? Please describe:
Currently, most numeric input fields allow any value. When very large values are entered we are unable to provide a proper error message because it actually manifests as a syntax error while parsing the request (due to integer size limits vs. javascript using floats).

image-2019-07-30-09-37-37-317

Describe the solution you'd like:
All numeric input fields have a max value enforced in the UI that prevents the parse error

Rotations: Deprecated timezone leading to text rendering issues

Describe the Bug:
Text rendering issues have been observed on some browsers (e.g. Chrome) for deprecated timezones.
This is happening because of some timezones (like 'US/Central') being deprecated and hence, not being supported by all browsers, but the backend database (Postgres) still considers them as valid.

Steps to Reproduce:

  1. Go to 'Rotations'
  2. Click on any one rotation to go to its details page.
  3. Scroll down to the description text for the rotation, most often starts with 'Hands off....'
  4. See error like 'Invalid DateTime US/Central...'

Expected Behavior:
A proper text description for the rotation handoff date and time is expected.

Observed Behavior:
A rendering error is observed in that text with 'null' handoff day of the week and/or 'Invalid DateTime' for timestamp.

Screenshots/Stack Traces:

Screen Shot 2019-07-02 at 11 20 48 AM

Application Version:
v0.22.0

Desktop:

  • OS: MacOS
  • Browser: Chrome

Additional Context:
This issue is only limited to the UI. Scheduling still works as intended.

A possible workaround for this issue is to replace the deprecated timezone with it's equivalent non-deprecated one.
For example: Replace US/Central with America/Chicago

For more information on which timezones are deprecated and their equivalent zones, please refer to https://en.wikipedia.org/wiki/List_of_tz_database_time_zones.

Ability to sort by alert date when querying alerts via the Graphql API

Is your feature request related to a problem? Please describe:

Describe the solution you'd like:
I'm using the Graphql API to find off-hours alerts in the past 7 days to bring visibility to the number of alerts in the teams I work with and potentially reduce false positives. I queried for the paged alerts using the API and stopped once I reach alerts 7 days old but the alerts are currently sorted by status (closed alerts are last) and not date so I was missing closed alerts that came at the end of the query results.

It'd be a big help if I could tell the API to sort by alert date when querying by alerts.

Describe alternatives you've considered:
Currently I've worked around this issue by querying separately for closed alerts and joining them back to the main list, but that's a bit messy and is also adding extra queries and extra load on the API.

Admin/Config should collapse sections by default

Is your feature request related to a problem? Please describe:
The admin config page has gotten very long, making it time consuming to get to the desired section.

Describe the solution you'd like:
An accordion style, one section expanded at a time. With everything collapsed by default.

Each section could have a chip/summary of the number of changes it contains before hitting save.

Describe alternatives you've considered:
N/A

Additional context:
N/A

QuerySelect: queries containing spaces are flaky

Describe the Bug:
When searching (via search-select or the search bar) if the query contains a space things can get into an odd/broken state.

Steps to Reproduce:

  1. Go to the services list page
  2. Click create new
  3. In the EP search box, start searching for a policy with a space in the name (enter the name with space)
  4. Gets stuck at "Loading..."
  5. Clear the form and enter other info, results don't update

Expected Behavior:
No errors, appropriate results displayed.

Observed Behavior:
Drop-down displays trailing-space error message and/or gets stuck at "Loading..."

Screenshots/Stack Traces:
image

Application Version:

$ goalert version
Version:   v0.22.0
GitCommit: 49153123b11243a5c539fbf598915aefbc44d7bd (clean)
BuildDate: 2019-06-10T16:52:26Z
GoVersion: go1.12.4 (gc)
Platform:  linux/amd64
Migration: trigger-config-sync (#179)

Desktop:

  • OS: MacOS
  • Browser: Chrome
  • Version: Version 75.0.3770.100 (Official Build) (64-bit)

Additional Context
Seems to have an issue if the search string contains a trailing space at any point. Stays broken until the page is refreshed.

Your .dependabot/config.yml contained invalid details

Dependabot encountered the following error when parsing your .dependabot/config.yml:

The property '#/update_configs/0/ignored_updates/1' contains additional properties ["dependency_name", "version_requirement"] outside of the schema when none are allowed
The property '#/update_configs/0/ignored_updates/1/match' of type null did not match the following type: object. Is the following line indented correctly?

Please update the config file to conform with Dependabot's specification using our docs and online validator.

config: add option to disable two way SMS

Is your feature request related to a problem? Please describe:
Some teams do not need to leverage two way SMS, and alert content/link is sufficient. A config option can be added to the admin page to disable two-way SMS (to disable the processing/displaying of Reply '3a' to ack, '3c' to close etc).

Chore: Transition lodash-es imports to lodash

Following front end unit tests that import lodash-es appear to take a substantially longer time to execute than the others.
Confirmed that replacing lodash-es import with lodash speeds up the unit tests.

app/users/util.test.js
app/selectors/url.test.js

We should adjust all front end app code imports to just use lodash.

Bad request for grafana/incoming

So I am currently working on testing a local setup with Grafana and Goalert with docker.
I have currently been given the generated endpoint
http://localhost:8081/api/api/v2/grafana/incoming?token=cd6f25cb-36b5-4878-b5ec-56552d6b08e0&summary=test.
testing this with curl or in Grafana gives me 404, removing one (duplicated?) /api/ gives me a bad request instead.

Anything obvious im doing wrong here?

mailgun: issues following setup guide

Describe the Bug:
The API key validation is too strict (causing a need to regen the key first) and the route configuration information has a typo. *@<Domain> should be .*@<Domain>.

Expected Behavior:

  • Guide matches current mailgun UI and route syntax
  • Any valid mailgun API key should be accepted

Observed Behavior:

  • Some initial keys fail the regex check (even though valid)
  • *@<Domain> does not work

Application Version:

$ goalert version
Version:   v0.22.0
GitCommit: 49153123b11243a5c539fbf598915aefbc44d7bd (clean)
BuildDate: 2019-06-10T16:52:26Z
GoVersion: go1.12.4 (gc)
Platform:  linux/amd64
Migration: trigger-config-sync (#179)

Additional Context:
GoAlert should probably loosen its validation of all external API keys -- those systems may change format at any time. To GoAlert they are only used as arbitrary strings, they should probably be validated as such.

This would also prevent future issues like this and #33

100% cpu usage on goalert/all-in-one on start

Describe the Bug:
docker run -it --rm -p 8081:8081 goalert/all-in-one and one core on my laptop under linux goes 100% cpu.

Steps to Reproduce:

  1. just launch and nothing else
  2. see htop

Expected Behavior:
Launched app should not use cpu until get job to do

$ docker run -it --rm -p 8081:8081 goalert/all-in-one Digest: sha256:a8559ab79aa5dc56a14d87769cd2318bcca0eba71bd76c0916c5f3230fb2505

Desktop:

  • OS: mint 19.1]

Additional Context:
I wish i have much more info to provide but no idea what can i add.
BTW: That's a good start! Can't wait to find the time to dive into the details.

User session cleanup

Is your feature request related to a problem? Please describe:
User session tokens expire after 30 days, however the sessions remain valid indefinitely.

Describe the solution you'd like:
Now that we track last access time, we should introduce the following changes to address this:

  • A migration to set NOT NULL on the last access column, setting the default value to now()
  • An addition to the cleanup manager of the engine to delete session rows with last access > 30 days

Describe alternatives you've considered:
There's not a great way without direct/manual DB access/cleanup

New version toast

Is your feature request related to a problem? Please describe:
There is no way currently for a user of GoAlert to know that a new version has been deployed and to refresh their browser.

Describe the solution you'd like:
A toast popup (similar to gmail) when a new version is detected with a "Refresh" link.

Describe alternatives you've considered:
N/A

Additional context:

  • Persistent, but not intrusive or in the way
  • To prevent "flapping": only display if a new version (and only said new version) has been "seen" for an hour with no changes
  • Set a hard cutoff (from when notification first appears, and page has focus) when the page will automatically refresh (24 hrs, a week?)
  • check for version by comparing GOALERT_VERSION js variable with the x-goalert-version meta tag on some interval

Automatically check for and fix Twilio config issues

Is your feature request related to a problem? Please describe:
When setting up for the first time, GoAlert could detect certain configuration problems and notify the admin, and potentially allow correcting the issue.

Describe the solution you'd like:

  • An error notification on the admin config page if the FromNumber doesn't exist
  • A warning if the FromNumber has incorrect webhook URL(s)
  • A "fix it" link in the warning for correcting the webhook URL(s)
  • An error if Twilio is enabled and PublicURL isn't set

Describe alternatives you've considered:
Currently an admin can log into Twilio separately and verify/correct configuration.

Error when enabling Slack

Hello,

We have GoAlert up and running on our Kubernetes cluster. We are trying to get Slack enabled but are getting an error when saving configuration changes. The ClientID and AccessToken are fine, so not sure why GoAlert keeps rejecting them. Attached is the screenshot of the error.

Thanks!

Screen Shot 2019-06-25 at 4 28 04 PM

Add alerting (outgoing) via email (smtp)

Is your feature request related to a problem? Please describe:
No option to send (outgoing) alerts via email; this is a major drawback as emails are still by far the most used channel for sending alerts. Widely supported, very easy to implement.
Imagine a team of 10 support technicians: chances they will all use slack is very slim and sms alerts are very intrusive so should only be sent for critical issues. Email alerts are standard practice.

Describe the solution you'd like:
Add support to send alerts via smtp server (no auth for local relay, plain auth as well as ssl/tls)

Describe alternatives you've considered:
None. Alerting by email is an essential feature.

Allow for Mobile numbers from the UK (+44) to be used

Is your feature request related to a problem? Please describe:
Only US and Indian numbers are avaliable at the moment, we need to be able to use UK based numbers for alerting

Describe the solution you'd like:
Ability to select +44 for country codes

Temporary Fixed Schedule Support

Is your feature request related to a problem? Please describe:
When planning for on-call coverage during peak times, it's often necessary to plan around a different set of rules/timeframes than normal day-to-day needs.

Describe the solution you'd like:

  • The ability to set a fixed schedule for a span of time (e.g. use a fixed one-time schedule for a single week)
  • The ability to make changes to the set of fixed shifts if necessary
  • Undo/delete the fixed schedule
  • Indicate fixed schedules on the calendar

The goal is for a user to be able to say "From Monday to Friday of this particular week, I want the schedule to be exactly this."

Describe alternatives you've considered:

  • Setting overrides manually (add/remove/replace) -- very tedious due to overrides not being able to overlap
  • Creating a separate schedule /w just ADD overrides and manually updating the escalation policy

FR: Rotation/handoff notifications

Is your feature request related to a problem? Please describe:
N/A

Describe the solution you'd like:
I would like to send an email or other notification when a user becomes the oncall in a rotation schedule.

Describe alternatives you've considered:
I don't think there is any support for this yet.

Additional context:

don't create a contact method until it has been successfully verified

Is your feature request related to a problem? Please describe:
Currently a user can create a contact method and cancel out of the verification process. This will create an unusable phone number on their profile that cannot be used until verified. This can potentially cause issues on teams using shared phone numbers.

Describe the solution you'd like:
Rather than opening two separate dialogs (one for create and one to verify), creating a contact method should be a two step process within the same dialog. If verification fails, the contact method will not be created.

Additional context:
Relevant files:

  • UserDetails.js
  • UserContactMethodCreateDialog
  • UserContactMethodVerificationDialog
  • user/contactmethod/store.go -> CreateTx
  • notification/store.go -> VerifyContactMethod

Schedules: Calendar height and font styles not passed on Firefox

Describe the Bug:
On Firefox, the a schedule's calendar is not displayed properly as the heights of the calendar cells are set to 0, and the font is unset.

Steps to Reproduce:

  1. Open Firefox
  2. Go to a schedule
  3. Scroll down to where the calendar should be
  4. See error

Expected Behavior:
The calendar should appear as expected as in Chrome.

Observed Behavior:
The calendar cells are mashed together with a height of 0, and the font is not set to be in line with Material UI.

Screenshots/Stack Traces:
image

Application Version:
v0.22.0-21-gd0e1609

Desktop:

  • OS: MacOS Mojave
  • Browser: Firefox Quantum
  • Version: 67.0.4

Smartphone/Tablet:
Calendar is desktop only.

ui: changing a date value within the new override form resets the date after a new poll

Describe the Bug:
When creating a new override from the shifts list on a schedule's details page, when either the start or end date is changed it will reset after new data is fetched as a result of the page polling. This bug does not occur from the overrides list, or the calendar.

Steps to Reproduce:

  1. Go to a schedule
  2. Click on Shifts
  3. Hover over the page's create fab in the bottom right
  4. Click on any create override button
  5. Click on start or end date from within the dialog
  6. Select a new date
  7. Within 3 seconds the selected date will reset to the initial form's value

Expected Behavior:
Data that is changed from within the override form should persist.

Screenshots/Stack Traces:

Image from Gyazo

Application Version:
v0.22.0

Desktop:

  • OS: MacOS Mojave
  • Browser: Chrome
  • Version: Chrome v75.0.3770.100

schedule/overrides: adding/removing override when more than 15 active/future overrides on schedule

Describe the Bug:
Adding or removing an override on a schedule's overrides page produces a broken state when both the following conditions are met:

  1. there are more than 15 active/future overrides (more than single page)
  2. you are NOT on the first page when you perform the add/remove

It appears the desired mutation is being executed appropriately in the background, but the page content (list of overrides) immediately disappears and a next page loading spinner manifests that never goes away (does not recover). Upon manually refreshing the page, you're able to view the overrides again with the expected override added/removed.

No console or network errors.

Steps to Reproduce:

  1. Create schedule with > 15 active/future overrides
  2. Navigate to schedule's overrides page
  3. Delete an override from page 2+
  4. Immediately after "Delete" is clicked (when the deletion confirmation dialog opens), overrides disappear from page content and the next page loading spinner appears (broken state that doesn't self-recover).

Expected Behavior:
When performing the above steps, the overrides content on the page persists and you don't get into a broken state.

Screenshots/Stack Traces:
bug

Application Version:

Version:   v0.24.0-92-gc09b702
GitCommit: c09b7025c9e174902fded86121a6bff043b58090 (clean)
BuildDate: 2019-12-18T14:30:42-06:00
GoVersion: go1.13.4 (gc)
Platform:  darwin/amd64
Migration: message-bundles (#191)

Desktop:

  • OS: MacOS
  • Browser: Chrome
  • Version: 79.0.3945.79

Escalation Policies: Cannot open Users tab in step form

Describe the Bug:
When creating an Escalation Policy step, the option to select 'Users' does not trigger a dropdown select menu when Slack is disabled in Admin permissions. In addition, the padding for the 'Add Rotations' and 'Add Schedules' options is offset.

Steps to Reproduce:

  1. Go to 'Escalation Policies'
  2. Click on any existing EP
  3. Either edit an existing step or click to add a new step
  4. The padding for the 'Optional' text is offset towards the right.
  5. Click on 'Users' to reproduce the bug.

Expected Behavior:
When 'Users' is clicked, it should push the other elements up and display an input field that allows the user to type in a name.

Observed Behavior:
When the button is clicked, it visually registers as a click, but the menu to type in a user does not appear.

Screenshots/Stack Traces:
Screen Shot 2019-06-26 at 9 54 04 AM

Application Version:
v0.22.0

Desktop:

  • OS: MacOS
  • Browser: Chrome

Unable to get Twilio to send an sms or a call

I am using https://hub.docker.com/r/goalert/goalert to test alert capabilities and unfortunately, I cant use Twilio to notify me on my phone. Every time I try activating my number, I get the see the following error in the container logs:

ERRO[0590] call user: 21205: Url is not a valid URL: http://[::]:8081/api/v2/twilio/call?msgBody=WW91ciB2ZXJpZmljYXRpb24gY29kZSBmb3IgR29BbGVydCBpczogOSwgNiwgNywgNywgOCwgNQ&msgID=ba32461a-7803-46ec-8da3-add7bb8fb9ba&msgSubjectID=-1&type=verify AuthSource="SourceTypeContactMethod{e2431099-edb9-4e07-9ccc-35930373357b}" AuthSystemComponent=Engine AuthUserID=c8e761b6-f9d1-4c4d-beef-2af50d423bd2 CallbackID=ba32461a-7803-46ec-8da3-add7bb8fb9ba DestType=DestTypeVoice DestTypeID=e2431099-edb9-4e07-9ccc-35930373357b Number=+1* ProviderName=Twilio-Voice ProviderType=DestTypeVoice Trigger=INTERVAL Type=TwilioVoice
ERRO[0590] send notification: 21205: Url is not a valid URL: http://[::]:8081/api/v2/twilio/call?msgBody=WW91ciB2ZXJpZmljYXRpb24gY29kZSBmb3IgR29BbGVydCBpczogOSwgNiwgNywgNywgOCwgNQ&msgID=ba32461a-7803-46ec-8da3-add7bb8fb9ba&msgSubjectID=-1&type=verify AuthSource="SourceTypeContactMethod{e2431099-edb9-4e07-9ccc-35930373357b}" AuthSystemComponent=Engine AuthUserID=c8e761b6-f9d1-4c4d-beef-2af50d423bd2 CallbackID=ba32461a-7803-46ec-8da3-add7bb8fb9ba DestType=DestTypeVoice DestTypeID=e2431099-edb9-4e07-9ccc-35930373357b ProviderName=Twilio-Voice ProviderType=DestTypeVoice Trigger=INTERVAL
ERRO[0590] send message: all notification senders failed AuthSystemComponent=Engine CallbackID=ba32461a-7803-46ec-8da3-add7bb8fb9ba DestType=DestTypeVoice DestTypeID=e2431099-edb9-4e07-9ccc-35930373357b Trigger=INTERVAL

We also tried to update the --listen port as --listen:8081 but no luck.

Any help in configuring this is highly appreciated.

ui: add error response support for favorite button

Is your feature request related to a problem? Please describe:
Currently, when a user favorites a target (service, rotation, or schedule) and the mutation or query fails, no error message is displayed (web/src/app/util/QuerySetFavoriteButton.js).

Describe the solution you'd like:
A dialog should be displayed similar to other error dialogs within the application if the user toggles the favorite button and the mutation fails.

If the query fails when loading the page, the star icon should be replaced with an error icon wrapped by a tooltip that will display the error message on hover (see: Warning within web/src/app/icons/components/Icons.js

Rotations not progressing

Describe the Bug:
When using a rotation of three days it appears to stop rotating users after at least one rotation.

Steps to Reproduce:

  1. Create a rotation
  2. Set for x days at x oclock
  3. See screenshots

Expected Behavior:
Rotations work

Observed Behavior:
Rotations get stuck

Screenshots/Stack Traces:
If applicable, add screenshots and/or stack traces to help explain your problem.

test
test1

Application Version:
Output of goalert version and/or version information from view-source on the UI.

`
$ goalert version
...
v0.24.1
...

Docker all-in-one does not start properly

Describe the Bug:
When I issue the command:
docker run -it --rm -p 8081:8081 goalert/all-in-one
It starts but shows some errors and then when I try to connect via web the web browser just clocks and never reaches a login screen

Steps to Reproduce:

  1. run command: docker run -it --rm -p 8081:8081 goalert/all-in-one
  2. Watch console log
  3. Notice errors
  4. Ignore and try to connect anyway
  5. Be patient
  6. Be sad when it does not work :(

Expected Behavior:
Run the command and be able to connect

Observed Behavior:
The console log (shown below) is displayed and the last few lines repeat endlessly

Screenshots/Stack Traces:

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... sh: locale: not found
2020-06-19 20:02:52.285 UTC [13] WARNING:  no usable system locales were found
ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    pg_ctl -D /var/lib/postgresql/data -l logfile start

waiting for server to start.... done
server started
Seeding DB with demo data...
ERROR:  missing data for column "details"
CONTEXT:  COPY alerts, line 2: "2       3bd1c2f8-0f96-41c3-964b-9852f8a412ab    manual  active  0       2019-05-13 13:01:33.861832-05   \N      2019-05-13 1..."
ERROR:  insert or update on table "alert_logs" violates foreign key constraint "alert_logs_alert_id_fkey"
DETAIL:  Key (alert_id)=(79672) is not present in table "alerts".
ERROR:  insert or update on table "escalation_policy_state" violates foreign key constraint "escalation_policy_state_alert_id_fkey"
DETAIL:  Key (alert_id)=(1) is not present in table "alerts".
ERROR:  insert or update on table "notification_policy_cycles" violates foreign key constraint "notification_policy_cycles_alert_id_fkey"
DETAIL:  Key (alert_id)=(79672) is not present in table "alerts".
INFO[0000] Applied UP migration 'trigger-config-sync' in 1ms 
INFO[0000] Applied UP migration 'remove-switchover-triggers' in 4ms 
INFO[0000] Applied UP migration 'drop-switchover-resources' in 1ms 
INFO[0000] Applied UP migration 'add-rotation-favorite' in 1ms 
INFO[0000] Applied UP migration 'add-schedule-favorites' in 0s 
INFO[0000] Applied UP migration 'verification-codes-update' in 3ms 
INFO[0000] Applied UP migration 'cascade-heartbeat-delete' in 1ms 
INFO[0000] Applied UP migration 'set-default-system-limits' in 0s 
INFO[0000] Applied UP migration 'site24x7-integration' in 0s 
INFO[0000] Applied UP migration 'om-status-index' in 0s 
INFO[0000] Applied UP migration 'message-bundle-versions' in 0s 
INFO[0000] Applied UP migration 'message-bundle-types' in 0s 
INFO[0000] Applied UP migration 'message-bundles' in 2ms 
INFO[0000] Applied 13 migrations in 41.429502ms.        
INFO[0000] Loaded config version 5                       AuthSystemComponent=Sudo
INFO[0000] Listening.                                    address="[::]:8081" url="http://[::]:8081"
INFO[0000] Engine cycle start.                           AuthSystemComponent=Engine
INFO[0000] Engine cycle end.                             AuthSystemComponent=Engine
INFO[0005] Engine cycle start.                           AuthSystemComponent=Engine Trigger=INTERVAL
INFO[0005] Engine cycle end.                             AuthSystemComponent=Engine Trigger=INTERVAL

Application Version:
Output of goalert version and/or version information from view-source on the UI.

Docker image says it was created on 2020-06-19. I am unable to access GUI for more specific detail.

Desktop:

  • OS: Linux
  • Browser: Firefox
  • Version 77

Additional Context:

I am running the docker image on Ubunto 20.04

proposal: remove generate from make smoketest command

I propose we remove make generate from the make smoketest command. Running generate adds several seconds to the startup time before the smoke-tests actually run, and when running tests multiple times this can slow down development time quite a bit. Files should be generated as needed with make generate, in my opinion, and doesn't really fit in this scenario.

slack/alerts: add interactivity and post updates to message

Is your feature request related to a problem? Please describe:

An alert went off. The notification went to Slack first and then to SMS and, later, voice. I acknowledged it via SMS. While I received an acknowledgment from SMS, nothing went into Slack. Someone else looked at the already-addressed problem because they didn't see the acknowledgment SMS arrive.

I got an SMS for closure, but didn't in Slack.

Describe the solution you'd like:

I'd like to see minimally a new Slack message saying that the issue has been acknowledged and eventually closed, one message for each event.

Adding a reaction or a message in-thread or both would reduce clutter. Updating the message would strongly indicate the status but someone could miss the edit, thus the need for a message in-thread.

Ideally, Slack's button workflow would very much work to our advantage. A button for acknowledgment when clicked does the same as acknowledging via SMS and other buttons for escalation, all-hands, manual closure, etc. could accentuate and enable a Slack-based workflow similar to other (proprietary) tools on the market.

Describe alternatives you've considered:

I considered highlights and manually adding the ack and closure in the thread. The text of the alert is so generic that it's risky to set something like alert as a highlighted word, so I've set the name of the service in the alert as a highlight. In my case, it's said rarely enough that I should not get false-positive notifications in another channel.

Additional context:

None pertinent right now.

implement alert severity (warning, critical, exception, notification)

Is your feature request related to a problem? Please describe:
There is currently no option to specify alert severity which is major drawback because alerts are all considered to be of equal importance.
In production environments alerts are delegated by priority; critical alerts like server malfunction need to be taken care of immediately while low priority alerts like a certificate expiring within a month or log folder growing to large size do not require immediate attention and can be handled during maintenance hours days or even weeks later.

Describe the solution you'd like:
To be able to specify alert severity via parameter (when sending an alert) and then route an alert to an appropriate channel(s).
example:
low severity for alerts that can be handled within hours/days: send over email because there is no point waking up oncall staff at 2AM in the morning over trivial issues.
high severity for alerts that must be handled immediately: send over sms (and in addition email, slack etc)

Describe alternatives you've considered:
There is no alternative as severity is not implemented.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.