Giter Site home page Giter Site logo

newrelic / nr1-status-pages Goto Github PK

View Code? Open in Web Editor NEW
35.0 27.0 23.0 3.01 MB

NR1 Status Pages allows you to collect and display the statuses of key dependencies in one place.

Home Page: https://github.com/newrelic/nr1-status-pages/discussions

License: Apache License 2.0

JavaScript 81.51% SCSS 18.49%
newrelic nerdpack nr1 nr1-status-pages status-pages statuspage nrlabs-viz nrlabs

nr1-status-pages's Introduction

New Relic One Catalog Project header

Status Page

CI GitHub release (latest SemVer including pre-releases) Snyk

Usage

Status Page is a Statuspage.io-inspired application that allows you to easily configure the most important key dependencies to your business in one color-coded view.

Status Page also displays an event stream of previous incidents and outages, along with updates for easy follow-along.

Choose an existing supported service like Jira, or add a new service.

Screenshot #1

Example hostnames:

Example hostnames:

Url Format: {baseUrl}/pages/history/{numeric statuspage_id}

Example hostnames:

Example subdomains:

NRQL query

NRQL query requires three fields/aliases to be returned: EventTimeStamp, EventStatus, EventName.

Example NRQL query:

FROM AlertViolationsSample SELECT timestamp as EventTimeStamp, priority as EventStatus, condition_name as EventName, entity.name LIMIT 50

or

SELECT timestamp as EventTimeStamp, priority as EventStatus, condition_name as EventName, entity.name FROM AlertViolationsSample LIMIT 50

RSS feed

It is possible to choose RSS feed as a provider for status pages.

CORS configuration

It is possible to configure CORS proxy when creating new service. CORS proxy address must contain {url} placeholder that will be replaced with provided hostname.

Example: https://cors-anywhere.herokuapp.com/{url}

Dependencies

Requires no specific data or additional features.

Enabling this App

This App is available via the New Relic Catalog.

To enable it in your account:

  1. go to Add Data > Apps and Visualzations and search for "Status Pages"
  2. Click the Status Pages card, and then click the Add this App button to add it to your account(s)
  3. Click Open App to launch the app (note: on the first time accessing the app, you may be prompted to enable it)

Once you have added your accounts, you can also open the app by:

  1. Open the Apps left-hand navigation menu item (you may need to click on the Add More ellipsis if it doesn't show up by default)
  2. In the Your Apps section, locate and click on the Status Pages card to open the app

Manual Deployment

If you need to customize the app, fork the codebase and follow the instructions on how to Customize a Nerdpack. If you have a change you feel everyone can benefit from, please submit a PR!

Support

This project is actively maintained by the New Relic Labs team. Connect with us directly by creating issues or asking questions in the discussions section of this repo.

We also encourage you to bring your experiences and questions to the Explorers Hub where our community members collaborate on solutions and new ideas.

New Relic has open-sourced this project, which is provided AS-IS WITHOUT WARRANTY OR DEDICATED SUPPORT.

Security

As noted in our security policy, New Relic is committed to the privacy and security of our customers and their data. We believe that providing coordinated disclosure by security researchers and engaging with the security community are important means to achieve our security goals.

If you believe you have found a security vulnerability in this project or any of New Relic's products or websites, we welcome and greatly appreciate you reporting it to New Relic through HackerOne.

Contributing

Contributions are welcome (and if you submit a Enhancement Request, expect to be invited to contribute it yourself 😁). Please review our Contributors Guide.

Keep in mind that when you submit your pull request, you'll need to sign the CLA via the click-through using CLA-Assistant. If you'd like to execute our corporate CLA, or if you have any questions, please drop us an email at [email protected].

Open Source License

This project is distributed under the Apache 2 license.

nr1-status-pages's People

Contributors

aminoz007 avatar artuone83 avatar aso1124 avatar aswanson-nr avatar austin-schaefer avatar bootsie123 avatar danielgolden avatar devfreddy avatar ericspence avatar jaesius avatar jbeveland27 avatar kav91 avatar lizbaker avatar madecki avatar mattbaker avatar michellosier avatar mjesun avatar moonlightkomorebi avatar norbertsuski avatar nr-opensource-bot avatar prototypicalpro avatar rudouglas avatar sarnathkj avatar shahramk avatar snyk-bot avatar tabathadelane avatar tangollama avatar timglaser avatar tschmidtnimble avatar tyreer 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

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

nr1-status-pages's Issues

Better New Relic integration

Summary

Currently NRQL is supported as a provider, but for example NR Alerts are not available as NRQL Events, thus they cannot be used as status events directly.

Desired Behaviour

Perhaps adding a new provider "New Relic Alerts" that uses NR API to fetch the incident history instead of NRQL, of course having alert events in NRQL would be very useful for dashboards etc. but it doesn't seem like it's going to happen any time soon.

Possible Solution

Hacky way to use webhooks and custom events to store alert events in insights.

Additional context

Also why just limit to events, a lot of status pages also show metrics such as response times etc. Would be nice to allow that.

Add "RSS Feed" as a provider

We need to add RSS feed as a provider

Summary

Many status pages don't adhere to the status IO or statusPage IO spec/standard. However, most of them support RSS feed which has the same xml structure regardless of the status page using it. It will be interesting to include an RSS feed parser as an option to support status pages that don't provide APIs. This react lib can help achieving this goal: https://www.npmjs.com/package/rss-parser

Desired Behaviour

The customer can choose in the list of provider: "RSS Feed". Using the RSS feed parser we can get the list of incidents, we have to display the incidents in the same format as the current format (top incidents and then when we click we open the list of all incidents). RSS feed does not provide the summary status (e.g. "All operational"), so we can replace the traffic light and summary with a link, by clicking on the link we should open a stacked nerdlet that has an Iframe of the status page: "<iframe src={hostname} />;

Additional context

This has been requested by many people.

Edit hostname not working

Edit the hostname after adding the status page has no effect.
The function below handles the edit operation, however this will not work because indexOfEditedHostname will be always equal to -1 since hostnameObject.hostname has been modified and no longer equal to the hostname saved in the nerdtorage!

  async editHostName(hostnameObject) {
    const { hostNames } = this.state;
    const { hostName } = hostnameObject;
    const indexOfEditedHostname = hostNames.findIndex(
      val => val.hostName === hostName
    );

    const newHostnameObject = hostnameObject;
    newHostnameObject.id = hostNames[indexOfEditedHostname].id;
    hostNames[indexOfEditedHostname] = newHostnameObject;

    this.setState({ hostNames: hostNames });
    await this.save();
  }

Show a list of popular StatusPage.io sites

Provide a list of known, popular services/sites that customers might want to add, then provide as a list of checkboxes in the dialog.

Maybe implement as a single .js or JSON file that is easy for the community to contribute to!

TextInput in nr1 is reporting numerous uncaught TypeError(s)

Description

the onClick, onKeyUp, and onKeyDown events on TextInput are reporting errors.

image (3)

These fields are not marked as required in API documentation nor should they be. This appears to be a platform bug that is affecting this application.

I'm recording it here for the sake of traceability.

Steps to Reproduce

  • Login to New Relic One
  • (if needed) go to the New Relic One Catalog and enable Status Pages
  • open Status Pages
  • Click Add new service button (top right)
  • click into/on focus to one of the text fields in the modal
  • see the Console logs and the numerous TypeError messages

Screen Shot 2020-07-29 at 9 42 17 AM

Expected Behaviour

No errors

Relevant Logs / Console output

wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1 Uncaught TypeError: Cannot read property 'onClick' of null
    at wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1
(anonymous) @ wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1
nr-loader-spa-current.min.js:1 POST https://chartdata.service.newrelic.com/v2/nrql 500 (Internal Server Error)
t.<computed> @ nr-loader-spa-current.min.js:1
window.fetch @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
window.fetch @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
c @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
forEach.t.<computed> @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
s @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
a @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
nrWrapper @ nr-loader-spa-current.min.js:1
r @ nr-loader-spa-current.min.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
value @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
c @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
forEach.t.<computed> @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
XE @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
a @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
nrWrapper @ nr-loader-spa-current.min.js:1
r @ nr-loader-spa-current.min.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
value @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
value @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
nrWrapper @ nr-loader-spa-current.min.js:1
wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1 Uncaught TypeError: Cannot read property 'onClick' of null
    at wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1
(anonymous) @ wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1
nr-loader-spa-current.min.js:1 POST https://chartdata.service.newrelic.com/v2/nrql 500 (Internal Server Error)
t.<computed> @ nr-loader-spa-current.min.js:1
window.fetch @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
window.fetch @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
c @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
forEach.t.<computed> @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
s @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
a @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
nrWrapper @ nr-loader-spa-current.min.js:1
r @ nr-loader-spa-current.min.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
value @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
c @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
forEach.t.<computed> @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
XE @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
a @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
nrWrapper @ nr-loader-spa-current.min.js:1
r @ nr-loader-spa-current.min.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
(anonymous) @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
value @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
value @ wanda--wanda-ec-ui--app-e0f5216a-prod.js:1
nrWrapper @ nr-loader-spa-current.min.js:1
wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1 Uncaught TypeError: Cannot read property 'onClick' of null
    at wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1
(anonymous) @ wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1
wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1 Uncaught TypeError: Cannot read property 'onKeyDown' of null
    at wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1
(anonymous) @ wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1
wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1 Uncaught TypeError: Cannot read property 'onKeyUp' of null
    at wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1
(anonymous) @ wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1
wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1 Uncaught TypeError: Cannot read property 'onKeyDown' of null
    at wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1
(anonymous) @ wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1
wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1 Uncaught TypeError: Cannot read property 'onKeyUp' of null
    at wanda--wanda-ec-ui--third-party-sdk-e0f5216a.js:1

Your Environment

  • Deployed app catalog nr1-status-pages 1.0.3
  • Browser name and version: Chrome Version 84.0.4147.89
  • Operating System and version: Mac OS 10.14.6 (18G6020)

Additional context

Menu popover doesn't disappear after you click away from it

Description

On each of the status grid items there is a menu button in the top right of the page. When you click that menu item, the menu popover that appears only ever disappears when you click the button again. If you click away, it doesn't disappear.

Steps to Reproduce

  1. Click on the menu button of any of the status grid items on the page (it looks like a small grey button with 3 dots inside).
  2. Click outside of the menu anywhere on the page.
  3. Notice how the menu does not disappear.

Expected Behaviour

I expect that when I click outside of from the menu (or after a short delay after a mouseOut event) that the menu would disappear.

Your Environment

  • NR1 CLI version used: @datanerd/nr1/1.19.5 darwin-x64 node-v10.16.3
  • Browser name and version: VersiΓ³n 80.0.3987.122 (Build oficial) (64 bits)
  • Operating System and version: MacOS Catalina 10.15.3 (19D76)

Loading fails due to null nerdStorage.document in suggested-status-pages/index.js

The componentDidMount component of the suggested-status-pages populates the array with null fields not handled throughout the call. Perhaps make the following update

Object.keys(relationshipsResults.data.actor).forEach(key => {
                if (relationshipsResults.data.actor[key].nerdStorage) {
                    allHostNames.push(relationshipsResults.data.actor[key].nerdStorage.document);
                }
            });

with

Object.keys(relationshipsResults.data.actor).forEach(key => {
                if ((relationshipsResults.data.actor[key].nerdStorage || {}).document) {
                    allHostNames.push(relationshipsResults.data.actor[key].nerdStorage.document);
                }
            });

NRQL severity attribute should be handled gracefully

If EventStatus returned by the NRQL query is not equal to "None", "Critical" or "Warning" the app will crash.

Description

If EventStatus is equal to "SUCCESS" or "FAILED", the app will crash. This should be handled gracefully.
Two options are possible here (option 2 is preferable):
1- Any EventStatus should be transformed into "None" if EventStatus coming from the query not in:

const NRQLSeverityToKnown = {
  None: 'none',
  Critical: 'critical',
  Warning: 'minor'
};

(snippet above from nrql.js).

2- Do not hardcode the severity object but ask the user what Critical is equal to ("FAILED" for example), what None=Ok is equal to ("SUCCESS" for example) and what Warning is equal to (all should be optional, if nothing is entered then use "None" always).
In addition, we have to implement option one above to prevent any crash if the user specify something that is not equal to the EventStatus coming from the query.

Steps to Reproduce

Create a NRQL status page using this query: FROM SyntheticCheck SELECT monitorName as EventName, result as EventStatus, timestamp as EventTimeStamp limit 5
The query will return this table:
Screen Shot 2020-07-22 at 11 53 32 PM

the application will crash because of this error "cannot read property 'tolowercase' of undefined"

Enable rearranging of tiles via drag and drop

Summary

It would be nice to be able to rearrange the order that each tile shows up in the view, and I think the most intuitive way to do this would be to enable drag and drop.

Desired Behaviour

When you click and hold on a tile you should able to move it to a different position along a predefined grid. When dropped over another existing tile, the other existing tile should move out of it's way to make space for the one in your hand.

Possible Solution

React DND

Additional context

Originally Freddy's idea. Good idea so logging it down here.

Only Admin can add services to this app

Description

I added Status Pages as an admin, I was able to add services and it will be saved automatically. Next time, I open the app, I can see the services. But if I login as a restricted user, even with nerdpack manager role, the services added by me are not saved. When I come back to the app again, it still shows no service.
NOTE: # ( Describe the problem you're encountering. )
TIP: # ( Do NOT give us access or passwords to your New Relic account or API keys! )

Steps to Reproduce

Expected Behaviour

Relevant Logs / Console output

Your Environment

  • NR1 CLI version used:
  • Browser name and version:
  • Operating System and version:

Additional context

Unable to add Google Cloud Status Dashboard, AWS Service Health Dashboard

Description

I'm unable to add https://status.cloud.google.com/ or https://status.aws.amazon.com/ to my New Relic One Status Pages. I was able to add https://www.cloudflarestatus.com/ without issue.

Steps to Reproduce

  1. New Relic One
  2. Status Pages
  3. Add new service
  4. Service name: Google Cloud Status Dashboard
  5. Hostname: https://status.cloud.google.com/
  6. Provider: Google
  7. Add new service

Creates a new box / status page, but it's empty with a spinner.

Expected Behaviour

Status page is created.

Relevant Logs / Console output

network.js:53 Uncaught (in promise) TypeError: Cannot read property 'name' of undefined
    at e.value (network.js:53)
    at e.<anonymous> (network.js:34)
    at u (runtime.js:45)
    at Generator._invoke (runtime.js:274)
    at Generator.forEach.t.<computed> [as next] (runtime.js:97)
    at n (asyncToGenerator.js:3)
    at s (asyncToGenerator.js:25)
    at asyncToGenerator.js:32
    at new Promise (<anonymous>)
    at e.<anonymous> (asyncToGenerator.js:21)
value @ dd63659f-6f57-42f2-9428-c5ad151c35af--status-pages.js:1
(anonymous) @ dd63659f-6f57-42f2-9428-c5ad151c35af--status-pages.js:1
u @ index.js:1
(anonymous) @ index.js:1
forEach.t.<computed> @ index.js:1
n @ vendors~dd63659f-6f57-42f2-9428-c5ad151c35af--vendors.js:1
s @ vendors~dd63659f-6f57-42f2-9428-c5ad151c35af--vendors.js:1
(anonymous) @ vendors~dd63659f-6f57-42f2-9428-c5ad151c35af--vendors.js:1
(anonymous) @ vendors~dd63659f-6f57-42f2-9428-c5ad151c35af--vendors.js:1
(anonymous) @ dd63659f-6f57-42f2-9428-c5ad151c35af--status-pages.js:1
(anonymous) @ dd63659f-6f57-42f2-9428-c5ad151c35af--status-pages.js:1
u @ index.js:1
(anonymous) @ index.js:1
forEach.t.<computed> @ index.js:1
n @ vendors~dd63659f-6f57-42f2-9428-c5ad151c35af--vendors.js:1
s @ vendors~dd63659f-6f57-42f2-9428-c5ad151c35af--vendors.js:1
(anonymous) @ vendors~dd63659f-6f57-42f2-9428-c5ad151c35af--vendors.js:1
(anonymous) @ vendors~dd63659f-6f57-42f2-9428-c5ad151c35af--vendors.js:1
(anonymous) @ dd63659f-6f57-42f2-9428-c5ad151c35af--status-pages.js:1
commitLifeCycles @ react-dom.development.js:16085
commitAllLifeCycles @ react-dom.development.js:17386
callCallback @ react-dom.development.js:143
invokeGuardedCallbackDev @ react-dom.development.js:193
invokeGuardedCallback @ react-dom.development.js:250
commitRoot @ react-dom.development.js:17582
completeRoot @ react-dom.development.js:19036
performWorkOnRoot @ react-dom.development.js:18965
performWork @ react-dom.development.js:18873
performSyncWork @ react-dom.development.js:18847
interactiveUpdates$1 @ react-dom.development.js:19116
interactiveUpdates @ react-dom.development.js:2167
dispatchInteractiveEvent @ react-dom.development.js:4979
Show 2 more frames
status-page.js:257 Uncaught TypeError: Cannot read property 'stopPropagation' of undefined
    at u.value (status-page.js:257)
    at u.value (status-page.js:263)
    at HTMLUnknownElement.callCallback (react-dom.development.js:143)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:193)
    at invokeGuardedCallback (react-dom.development.js:250)
    at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:264)
    at executeDispatch (react-dom.development.js:555)
    at executeDispatchesInOrder (react-dom.development.js:574)
    at executeDispatchesAndRelease (react-dom.development.js:674)
    at executeDispatchesAndReleaseTopLevel (react-dom.development.js:682)
value @ dd63659f-6f57-42f2-9428-c5ad151c35af--status-pages.js:1
value @ dd63659f-6f57-42f2-9428-c5ad151c35af--status-pages.js:1
callCallback @ react-dom.development.js:143
invokeGuardedCallbackDev @ react-dom.development.js:193
invokeGuardedCallback @ react-dom.development.js:250
invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:264
executeDispatch @ react-dom.development.js:555
executeDispatchesInOrder @ react-dom.development.js:574
executeDispatchesAndRelease @ react-dom.development.js:674
executeDispatchesAndReleaseTopLevel @ react-dom.development.js:682
forEachAccumulated @ react-dom.development.js:656
runEventsInBatch @ react-dom.development.js:810
runExtractedEventsInBatch @ react-dom.development.js:818
handleTopLevel @ react-dom.development.js:4923
batchedUpdates$1 @ react-dom.development.js:19056
batchedUpdates @ react-dom.development.js:2148
dispatchEvent @ react-dom.development.js:5002
interactiveUpdates$1 @ react-dom.development.js:19111
interactiveUpdates @ react-dom.development.js:2167
dispatchInteractiveEvent @ react-dom.development.js:4979
react-dom.development.js:283 Uncaught TypeError: Cannot read property 'stopPropagation' of undefined
    at u.value (status-page.js:257)
    at u.value (status-page.js:263)
    at HTMLUnknownElement.callCallback (react-dom.development.js:143)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:193)
    at invokeGuardedCallback (react-dom.development.js:250)
    at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:264)
    at executeDispatch (react-dom.development.js:555)
    at executeDispatchesInOrder (react-dom.development.js:574)
    at executeDispatchesAndRelease (react-dom.development.js:674)
    at executeDispatchesAndReleaseTopLevel (react-dom.development.js:682)
value @ dd63659f-6f57-42f2-9428-c5ad151c35af--status-pages.js:1
value @ dd63659f-6f57-42f2-9428-c5ad151c35af--status-pages.js:1
callCallback @ react-dom.development.js:143
invokeGuardedCallbackDev @ react-dom.development.js:193
invokeGuardedCallback @ react-dom.development.js:250
invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:264
executeDispatch @ react-dom.development.js:555
executeDispatchesInOrder @ react-dom.development.js:574
executeDispatchesAndRelease @ react-dom.development.js:674
executeDispatchesAndReleaseTopLevel @ react-dom.development.js:682
forEachAccumulated @ react-dom.development.js:656
runEventsInBatch @ react-dom.development.js:810
runExtractedEventsInBatch @ react-dom.development.js:818
handleTopLevel @ react-dom.development.js:4923
batchedUpdates$1 @ react-dom.development.js:19056
batchedUpdates @ react-dom.development.js:2148
dispatchEvent @ react-dom.development.js:5002
interactiveUpdates$1 @ react-dom.development.js:19111
interactiveUpdates @ react-dom.development.js:2167
dispatchInteractiveEvent @ react-dom.development.js:4979

Your Environment

  • Browser name and version: Chrome Version 83.0.4103.116 (Official Build) (64-bit)

  • Operating System and version: Ubuntu Linux 20.04

Additional context

Both myself and New Relic staff were able to replicate this behavior independently. Since this is open-source, I'm submitting an issue here. Let me know if you have any questions!

[Repolinter] Open Source Policy Issues

Repolinter Report

πŸ€–This issue was automatically generated by repolinter-action, developed by the Open Source and Developer Advocacy team at New Relic. This issue will be automatically updated or closed when changes are pushed. If you have any problems with this tool, please feel free to open a GitHub issue or give us a ping in #help-opensource.

This Repolinter run generated the following results:

❗ Error ❌ Fail ⚠️ Warn βœ… Pass Ignored Total
0 2 0 10 0 12

Fail #

❌ readme-contains-security-section #

Doesn't contain a security section (README.md). New Relic recommends having a Security section in your README to address concerns such as vulnerability reporting. This security section should also contain a link to the security policy (found under the "Security" tab of the repository). For an example of this section, please see the NR1 Catalog Template. For more information please visit https://nerdlife.datanerd.us/new-relic/security-guidelines-for-publishing-source-code.

❌ readme-contains-link-to-security-policy #

Doesn't contain a link to the security policy for this repository (README.md). New Relic recommends referencing the open source security policy (found under the "Security" tab of the repository) in a Security section in the README. For an example of this, please see the NR1 Catalog Template. For more information please visit https://nerdlife.datanerd.us/new-relic/security-guidelines-for-publishing-source-code.

Passed #

Click to see rules

βœ… license-file-exists #

Found file (LICENSE). New Relic requires that all open source projects have an associated license contained within the project. This license must be permissive (e.g. non-viral or copyleft), and we recommend Apache 2.0 for most use cases. For more information please visit https://docs.google.com/document/d/1vML4aY_czsY0URu2yiP3xLAKYufNrKsc7o4kjuegpDw/edit.

βœ… readme-file-exists #

Found file (README.md). New Relic requires a README file in all projects. This README should give a general overview of the project, and should point to additional resources (security, contributing, etc.) where developers and users can learn further. For more information please visit https://github.com/newrelic/open-source-tools/tree/master/javascript/oss-template.

βœ… readme-starts-with-nr1-catalog-header #

The first 1 lines contain all of the requested patterns. (README.md). The README of a community plus project should have a NR1 Catalog header at the start of the README. If you already have a NR1 Catalog header and this rule is failing, your header may be out of date. For more information please visit https://opensource.newrelic.com/oss-category/.

βœ… readme-contains-discuss-topic #

Contains a link to the appropriate discuss.newrelic.com topic (README.md). New Relic recommends directly linking the your appropriate discuss.newrelic.com topic in the README, allowing developer an alternate method of getting support. For more information please visit https://nerdlife.datanerd.us/new-relic/security-guidelines-for-publishing-source-code.

βœ… third-party-notices-file-exists #

Found file (THIRD_PARTY_NOTICES.md). A THIRD_PARTY_NOTICES.md file must be present to grant attribution to all dependencies being used by this project. For JavaScript projects, you can generate this file using the oss-cli. For more information please visit https://docs.google.com/document/d/1y644Pwi82kasNP5VPVjDV8rsmkBKclQVHFkz8pwRUtE/view.

βœ… github-actions-workflow-file-exists #

Found file (.github/workflows/pr.yml). Any Community Plus project must integrate with GitHub actions. For more information please visit https://docs.google.com/document/d/1y644Pwi82kasNP5VPVjDV8rsmkBKclQVHFkz8pwRUtE/view.

βœ… nr1-catalog-config-file-exists #

Found file (catalog/config.json).

βœ… nr1-catalog-screenshots-directory-exists #

Found file (catalog/screenshots).

βœ… nr1-catalog-documentation-file-exists #

Found file (catalog/documentation.md).

βœ… package-scripts-present #

An eslint-check and eslint-fix npm script found in file (package.json). NPM scripts for ESLint (eslint-check and eslint-fix) are required to properly integrate with the nerdpack system.

Nerdpack failing & crashing.

Since the redesign by @danielgolden - (redesign looks fantastic btw) - I can't get this nerdpack to work. I have attached a video, where upon selecting a service, I get a non-stop spinner.

When I try to manually add a service, I can click the text inputs, but typing anything immediately results in the nerdpack crashing. This happens in Safari.

This Nerdpack works as expected in Chrome.

Video: https://drive.google.com/file/d/1bZZ96REvdD1qY-xFuWok6TU4AdNiIOyL/view?usp=sharing

Built-in support for AWS

Summary

Currently adding AWS via RSS is possible, but cumbersome (having to use some 3rd party service to combine multiple rss streams into one) and it does not display the overall status.

Desired Behaviour

It would be nice to have AWS as a provider where you can simply choose the regions and services you are interested in and this app would handle the rest.

Possible Solution

Like I said, it's currently possible using a rss combiner service such as http://www.rssmix.com/ but it's not secure (https) and doesn't display the overall status nicely.

Save config as soon as I hit "add"

It would be cool if my config changes were persisted the second I hit "+ add" on a new status page, I forgot to hit the "save" button afterwards and has just assumed save happened automatically!

Regression in Develop branch

Logo should not be mandatory

Description

The logo field should NOT be mandatory, if the logo is not provided, use the Service name (which is mandatory) as a title instead.
Why? because, for many internal status pages, we can use a NRQL query however we don't have necessarily a logo for each of these internal services.

Can't expand incidents on details overlay

Description

An issue on the details overlay. When you click on any other item, it closes the original open incident and never opens the item you clicked on.

Steps to Reproduce

β€’ Click on an item in the status page
β€’ Behaves as expected, open the specific incident that you clicked on
β€’ Now in that same window, click on another incident
β€’ The previous incident detail closes, but the clicked item never opens

Expected Behaviour

Another incident should expand and show it's details

Status Pages is not loading correctly in EU region

Description

Added Status Pages from the app catalog. When it loads, it's broken. No account found in the dropdown and there are errors in the console.

Steps to Reproduce

Add Status Pages app from the public catalog. We are using an account in the EU region.

Expected Behaviour

App loads properly.

Relevant Logs / Console output

entity-search.service.eu.newrelic.com/v3/entities/MjkzNzIxNXxWSVp8REFTSEJPQVJEfDY3OTk5:1 Failed to load resource: the server responded with a status of 404 (Not Found) wanda--wanda-ec-ui--third-party-sdk-release-1754.js:1 [ 4m 45s] [dd63659f-6f57-42f2-9428-c5ad151c35af.st…] The "label" prop is deprecated; if you are using <Dropdown> as a form component, use <Select> instead (due 1/1/2021) account-picker.js:117 Warning: Failed prop type: The prop childrenis marked as required inForwardRef(native), but its value is null. in ForwardRef(native) (created by s) in s (created by u) in div (created by e) in e (created by ForwardRef(native)) in div (created by e) in e (created by ForwardRef) in e (created by ForwardRef) in u (created by c) in div (created by c) in c (created by Context.Consumer) in a (created by Context.Consumer) in a in e printWarning$1 @ react.development.js:2606 checkPropTypes @ react.development.js:2669 validatePropTypes @ react.development.js:2838 createElementWithValidation @ react.development.js:2927 (anonymous) @ account-picker.js:117 value @ account-picker.js:116 finishClassComponent @ react-dom.development.js:14425 updateClassComponent @ react-dom.development.js:14388 beginWork @ react-dom.development.js:15206 performUnitOfWork @ react-dom.development.js:17944 workLoop @ react-dom.development.js:17984 renderRoot @ react-dom.development.js:18070 performWorkOnRoot @ react-dom.development.js:18961 performWork @ react-dom.development.js:18873 performSyncWork @ react-dom.development.js:18847 requestWork @ react-dom.development.js:18716 scheduleWork @ react-dom.development.js:18525 enqueueSetState @ react-dom.development.js:12437 Component.setState @ react.development.js:460 (anonymous) @ account-picker.js:83 u @ runtime.js:45 (anonymous) @ runtime.js:274 forEach.t.<computed> @ runtime.js:97 r @ asyncToGenerator.js:3 a @ asyncToGenerator.js:25 react.development.js:2606 Warning: Failed prop type: The prop childrenis marked as required ine, but its value is null. in e (created by ForwardRef(native)) in div (created by Context.Consumer) in div (created by Context.Consumer) in div (created by e) in e (created by e) in div (created by e) in div (created by e) in div (created by e) in e (created by Context.Consumer) in div (created by e) in e (created by e) in e (created by Context.Consumer) in Mn (created by Context.Consumer) in e (created by e) in e (created by e) in e (created by e) in div (created by e) in e (created by ForwardRef) in e (created by ForwardRef) in s (created by c) in div (created by e) in e (created by ForwardRef(native)) in div (created by e) in e (created by ForwardRef) in e (created by ForwardRef) in div (created by c) in c (created by Context.Consumer) in a (created by Context.Consumer) in a in e

Your Environment

  • NR1 CLI version used: Did not use NR1 CLI
  • Browser name and version: Chrome Version 87.0.4280.67 (Official Build) (x86_64)
  • Operating System and version: Mac OS Catalina

Additional context

None.

Cannot create NRQL service, choosing NRQL from the provider list crashes the application

As soon as you select "NRQL" from the provider list crashes the application. Console errors show "Cannot read property 'inputValue' of undefined"

Steps to Reproduce

  • Click "Add New Service"
  • Select NRQL from Provider dropdown
  • Observe crash

Expected Behaviour

Expect to be able to specify NRQL query

Relevant Logs / Console output

ncaught TypeError: Cannot read property 'inputValue' of undefined
    at c.value (VM17 dd63659f-6f57-42f2-9428-c5ad151c35af--status-pages.js:1)
    at finishClassComponent (VM9 react-dom.development.js:14425)
    at updateClassComponent (VM9 react-dom.development.js:14388)
    at beginWork (VM9 react-dom.development.js:15206)
    at performUnitOfWork (VM9 react-dom.development.js:17944)
    at workLoop (VM9 react-dom.development.js:17984)
    at HTMLUnknownElement.callCallback (VM9 react-dom.development.js:143)
    at Object.invokeGuardedCallbackDev (VM9 react-dom.development.js:193)
    at invokeGuardedCallback (VM9 react-dom.development.js:250)
    at replayUnitOfWork (VM9 react-dom.development.js:17231)
value @ VM17 dd63659f-6f57-42f2-9428-c5ad151c35af--status-pages.js:1
finishClassComponent @ VM9 react-dom.development.js:14425
updateClassComponent @ VM9 react-dom.development.js:14388
beginWork @ VM9 react-dom.development.js:15206
performUnitOfWork @ VM9 react-dom.development.js:17944
workLoop @ VM9 react-dom.development.js:17984
callCallback @ VM9 react-dom.development.js:143
invokeGuardedCallbackDev @ VM9 react-dom.development.js:193
invokeGuardedCallback @ VM9 react-dom.development.js:250
replayUnitOfWork @ VM9 react-dom.development.js:17231
renderRoot @ VM9 react-dom.development.js:18103
performWorkOnRoot @ VM9 react-dom.development.js:18961
performWork @ VM9 react-dom.development.js:18873
performSyncWork @ VM9 react-dom.development.js:18847
batchedUpdates$1 @ VM9 react-dom.development.js:19060
batchedUpdates @ VM9 react-dom.development.js:2148
dispatchEvent @ VM9 react-dom.development.js:5002

Your Environment

  • Browser name and version: Chrome
  • Operating System and version: Mac

Google provider is not working

Description

NOTE: # Creating new statuspage with Google provider is throwing an error
[TIP]: # ( Do NOT give us access or passwords to your New Relic account or API keys! )

Steps to Reproduce

  1. Create new service.
  2. Choose provider Google
  3. Add any status page you want (I tried https://status.azure.com )

image

  • Browser name and version:
    Version 85.0.4183.102 (Official Build) (64-bit)

  • Operating System and version: Windows 10 2004

Accounts tab breaks w/ large numbers of accounts

NerdGraph currently blocks requests that ask for more than 200 fields. The generated query for the accounts page generates one field per account and uses aliasing to fetch multiple accounts in one request. For users w/ a large number of accounts, this can generate a query that hits NerdGraph's field request limit.

A fix we've recommended for internal teams is to batch your requests for accounts and just ask for $N at a time until you have the full list!

Redesign in the open

Working on a redesign of this nerdpack, going to log the progress in an issue here.

Timeline is not loading correctly

When I open timeline with incidents for one tile, then close and then open another one - it is still the old one.

Description

It seems that timeline with incidents is not loading correctly when you open it more than one time. There is still first one.

Steps to Reproduce

Open Status Pages app -> create two tile services -> open incidents for first one -> close incidents -> open incidents for second tile.

Expected Behaviour

Timeline is loaded correctly for selected service.

Relevant Logs / Console output

No logs.

Your Environment

  • NR1 CLI version used: 1.22.2
  • Browser name and version: Chrome 83.0.4103.116
  • Operating System and version: macOS 10.15.5

CORS handling should be improved

Summary

For now, if user wants to add a host that has strict CORS rules, there's a checkbox that partially covers this problem. By partially I mean that we're using a proxy server that has request amount limitation. That brings us to the issue - after a specific amount of data refreshes, the status page will start returning errors (Too many requests).

Desired Behaviour

We want to make sure that no matter what, the status page will work and fetch fresh data. We might have to implement our own proxy server.

Possible Solution

Our own proxy server or choosing a different public one?

Things I love

  • The fact that it's entity centric
  • The fact that it's so fluid to jump in and add status pages, and the fact that useful data is there immediately
  • The dope listing of the status page log, it's gorgeous, great UI work
  • The suggestions!!

upgrade eslint

rm -r node_modules
npm uninstall eslint
npm install --save-dev eslint

Account selector dropdown is NOT evident upon installation

After installing this NerdPack and configuring one or more status pages to use, I was left scratching my head why nothing was showing in the Nerdlet. It was not apparent that I needed to first select an account from the account dropdown (between the 'Refresh rate' dropdown and 'Edit StatusPages' button) before the status page summaries that I configured would be displayed.

I suggest auto-selecting the first account in the list, displaying a message to tell the user to select an account, and/or putting something like 'Select Account' as the default text in the account selector dropdown.

If the status page hasn't been added correctly it doesn't inform user about that

Description

If the status page hasn't been added correctly (i.e. incorrect host URL), it's being displayed on statuses page with loading spinner. After refreshing the page, it's disappearing like it never existed.

Steps to Reproduce

  • Open Status Pages
  • Start creating a new status page
  • Put incorrect data (i.e. wrong host URL or just leave them all empty)
  • See the empty status page with loader inside
  • Refresh the page and it disappears

Expected Behaviour

There should be some kind of alert that tells the user to fix input values or to repeat whole process with correct data.

Relevant Logs / Console output

Errors are different for various scenarios but basically:
wanda--wanda-ec-ui--third-party-sdk-release-1206.js:1 Uncaught (in promise) Error: GraphQL error: Service Exception: NerdStore.API.Error Server Error (403)

Your Environment

  • NR1 CLI version used: 1.22.2
  • Browser name and version: Chrome 83
  • Operating System and version: macOS Catalina

Upgrade the project meta data to support new catalog commands

Add metadata to the repository that matches the example laid out here.

  • Add a config.json file to a catalog directory in the repo root, matching this format.
  • Move the /screenshots directory into catalog:
    • Update the screenshot file names (to match this format)
    • Update the screenshot links in the README.md.
  • Add a documentation.md file to a catalog directory in the repo root, matching this format.
  • (Optional) If there's additional documentation referenced in the repo, add a additionalInfo.md file to a catalog directory in the repo root, matching this format.
  • Update the relative paths in documentation.md to be absolute paths
  • Add the new header image to the top of README.md and catalog/documentation.md.
  • Ensure the README.md commands section matches Justin's snippet.
  • Run npm start and let the CLI move the nr1.json
    • Edit that file to make sure the name and description make sense.

CORS Issues

CORS

Summary

When requesting a resource on the web from one domain to another, from a script (i.e. Javascript), browsers implement a security policy/check called CORS:

For security reasons, browsers restrict cross-origin HTTP requests initiated from scripts. For example, XMLHttpRequest and the Fetch API follow the same-origin policy. This means that a web application using those APIs can only request resources from the same origin the application was loaded from, unless the response from other origins includes the right CORS headers.

In our particular circumstance, requesting these resources through a client-side script (Nerdpack), if the requested resource does not explicitly have -
access-control-allow-origin: * in the response headers of their site, for example Github Status, nothing in a Nerdpack can get around the CORS limitation without first routing the request through some kind of "proxy" which is not forced to comply with CORS (enforced by the browser).

This is not a new challenge for the web, and is an all too common issue. There are examples of how to accomplish this, including a public option CORS Anywhere which has corresponding code on Github.

Status Pages Affected

Although many status pages do have this present, some do not, here's a list of one's we are aware of. Until such time that one of these projects changes and adds access-control-allow-origin: *, the only way to add support for these is to route requests through an aforementioned "CORS Proxy".

Slack (Issue #24)

Website
Atom Feed
RSS Feed

Gitlab (Issue #34)

Website
RSS Feed - Has a hash in the url - will need to keep in mind this could change... could also just be where/how they're hosting it.

Zendesk (Issue #38 )

Website
Incidents JSON Feed - utilizes parameters as_of_date=2020-03-23 and days_back=90

Possible Solution(s)

  1. Request these status pages add the access-control-allow-origin: * header to their responses
  2. Add a "CORS Proxy" feature to nr1-status-pages:
    a. Allows user to specify that a given status page requires the usage of a CORS proxy
    b. Allows the user to provide the url of a CORS Proxy which we utilize to route the requests to the status page
    c. Optionally (TBD) include and utilize https://cors-anywhere.herokuapp.com/ by default for the known subset of status pages affected

Related Issues

Issue #24 - Slack
Issue #34 - Gitlab
Issue #37 - Zendesk

Support for https://status.gitlab.com/

Summary

I would like to be able to display status pages for hashicorp and gitlab. Currently, they don't seem to be working. I believe they are very popular services so ideally I am not the only one who would like to see them available.

Desired Behaviour

Simply be able to add https://status.hashicorp.com/ + https://status.gitlab.com/ and seeing the results in the NewRelic UI.

Additional context

I relay on gitlab cloud and terraform cloud so it would be a fantastic feature to add so I can have all status pages in a centralised UI.

There isn't any input validation while adding new service

Summary

There isn't any input validation while adding new service and the user can just add new service without filling anything.

Desired Behaviour

We should decide what are the required fields and enable validation that would inform the user what's missing.

Add Link as a provider

Summary

Add "link" as an option in the list of providers.

Desired Behaviour

The status page covers now "status page io", "status io, google, rss feed and NRQL. That covers probably the majority of the use cases. However, some pages don't provide an API or RSS feed, for these ones it would be nice to be able to add a tile with just a link to see the status page. This way this app can be used as the source of truth for status pages even for those that don't provide RSS feeds or APIs.

Additional context

with this last feature, all cases should be covered!

Search input styles are not being applied

Description

The search input (located in the top options bar) should have very similar styling to the dropdown to it's left, but for some reason the styles that should apply that styling are being overridden by the 3rd party component styles that come with the <TextField/> component.

Steps to Reproduce

View the nerdpack in any browser and use devtools to inspect the styles of the <input/> element inside of .toolbar-search.

Expected Behavior

The input should have the same styling (minus the dropdown arrow) that the dropdown next to it has.

Your Environment

  • NR1 CLI version used: n/a (not running this locally)
  • Browser name and version: Chrome 78.0.3904.97
  • Operating System and version: Mac OS Catalina 10.15.1

[Repolinter] Open Source Policy Issues

Repolinter Report

πŸ€–This issue was automatically generated by repolinter-action, developed by the Open Source and Developer Advocacy team at New Relic. This issue will be automatically updated or closed when changes are pushed. If you have any problems with this tool, please feel free to open a GitHub issue or give us a ping in #help-opensource.

This Repolinter run generated the following results:

❗ Error ❌ Fail ⚠️ Warn βœ… Pass Ignored Total
0 1 0 12 0 13

Fail #

❌ code-of-conduct-should-not-exist-here #

New Relic has moved the CODE_OF_CONDUCT file to a centralized location where it is referenced automatically by every repository in the New Relic organization. Because of this change, any other CODE_OF_CONDUCT file in a repository is now redundant and should be removed. For more information please visit https://docs.google.com/document/d/1y644Pwi82kasNP5VPVjDV8rsmkBKclQVHFkz8pwRUtE/view. Found files. Below is a list of files or patterns that failed:

  • CODE_OF_CONDUCT.md
    • πŸ”¨ Suggested Fix: Remove file

Passed #

Click to see rules

βœ… license-file-exists #

Found file (LICENSE). New Relic requires that all open source projects have an associated license contained within the project. This license must be permissive (e.g. non-viral or copyleft), and we recommend Apache 2.0 for most use cases. For more information please visit https://docs.google.com/document/d/1vML4aY_czsY0URu2yiP3xLAKYufNrKsc7o4kjuegpDw/edit.

βœ… readme-file-exists #

Found file (README.md). New Relic requires a README file in all projects. This README should give a general overview of the project, and should point to additional resources (security, contributing, etc.) where developers and users can learn further. For more information please visit https://github.com/newrelic/open-source-tools/tree/master/javascript/oss-template.

βœ… readme-starts-with-nr1-catalog-header #

The first 1 lines contain all of the requested patterns. (README.md). The README of a community plus project should have a NR1 Catalog header at the start of the README. If you already have a NR1 Catalog header and this rule is failing, your header may be out of date, and you should update your header with the suggested one below. For more information please visit https://opensource.newrelic.com/oss-category/.

βœ… readme-contains-security-section #

Contains a security section (README.md). New Relic recommends having a Security section in your README to address concerns such as vulnerability reporting. This security section should also contain a link to the security policy (found under the "Security" tab of the repository). For an example of this section, please see the NR1 Catalog Template. For more information please visit https://nerdlife.datanerd.us/new-relic/security-guidelines-for-publishing-source-code.

βœ… readme-contains-link-to-security-policy #

Contains a link to the security policy for this repository (README.md). New Relic recommends referencing the open source security policy (https://github.com/newrelic/<repo-name>/security/policy or ../../security/policy) in a Security section in the README. For an example of this, please see the NR1 Catalog Template. For more information please visit https://nerdlife.datanerd.us/new-relic/security-guidelines-for-publishing-source-code.

βœ… readme-contains-discuss-topic #

Contains a link to the appropriate discuss.newrelic.com topic (README.md). New Relic recommends directly linking the your appropriate discuss.newrelic.com topic in the README, allowing developer an alternate method of getting support. For more information please visit https://nerdlife.datanerd.us/new-relic/security-guidelines-for-publishing-source-code.

βœ… third-party-notices-file-exists #

Found file (THIRD_PARTY_NOTICES.md). A THIRD_PARTY_NOTICES.md file must be present to grant attribution to all dependencies being used by this project. For JavaScript projects, you can generate this file using the oss-cli. For more information please visit https://docs.google.com/document/d/1y644Pwi82kasNP5VPVjDV8rsmkBKclQVHFkz8pwRUtE/view.

βœ… github-actions-workflow-file-exists #

Found file (.github/workflows/catalog.yml). Any Community Plus project must integrate with GitHub actions. For more information please visit https://docs.google.com/document/d/1y644Pwi82kasNP5VPVjDV8rsmkBKclQVHFkz8pwRUtE/view.

βœ… nr1-catalog-config-file-exists #

Found file (catalog/config.json).

βœ… nr1-catalog-screenshots-directory-exists #

Found file (catalog/screenshots).

βœ… nr1-catalog-documentation-file-exists #

Found file (catalog/documentation.md).

βœ… package-scripts-present #

An eslint-check and eslint-fix npm script found in file (package.json). NPM scripts for ESLint (eslint-check and eslint-fix) are required to properly integrate with the nerdpack system.

Provide a list of common status pages

When I was testing I wasn't sure what URL to actually put into a manually configured status page. It would be great to provide a list of common pages people might wish to use, or even a large list that is searchable w/ the option to manually enter too.

Great as-is, but it could be a nice customer-friendly thing to do for folks just getting started like me :)

Small styling bugs

I think the latest changes are causing a few styling issues. Remember to run this against staging until after the build goes live on prod Monday.
Screen Shot 2019-09-14 at 12 54 11 PM

Optimize polling data flow

Summary

Current implementation has following issues with polling optimization which can be improved:

  • one tile is fetching all data twice - once for summary and once for recent incidents, sometimes it is the same source of information that could be fetched once
  • tile itself can fetch all data and than pass last incidents to small timeline on tile, instead of creating two Network objects to fetch data
  • when opening big timeline, new polling process starts, which is getting the same data as tile
  • when removing tile, data is still polled in background

Possible Solution

  • fetch data once and format as summary and recent incidents in main StatusPage component (if possible)
  • remove unnecessary Network object initialization in CurrentIncidents and pass incidents from StatusPage
  • add possibility to handle onClose event when StackedNerdlet is closed which will allow to stop polling data
  • clear polling when user deletes tile

Allow mixing in results from NRQL as an event stream

Summary

Scenario:
Users store incidents/statuses in Insights from various systems/platforms. Integration with Status Pages app would allow for a single POV.

Desired Behaviour

User selects NRQL as a data source.
User enters NRQL.
We query NRDB with the given NRQL to populate an additional card/stream of events/incidents.

Possible Solution

  1. Add NRQL as a "data source"
  2. Provide a user input that accepts NRQL
  3. Provide a standardized set of aliases (in the NRQL) for use in a formatter
  4. Test the NRQL + Formatter
  5. Save & present as its own status card

Additional context

Also Status Page would be awesome to be able to pull from a NRQL query as well i have a Azure Logic App pull statuses and store them in insights

SELECT product, severity, condition_name FROM alert SINCE 1 DAY AGO WHERE product = 'Azure DevOps'

Account options tab first?

We already chatted about this, we might want to put the account options first for manually added status pages, and offer the dependencies as the next, second step.

Also, is Account Options the right term? It's entity focused, right? So maybe "Entity Dependencies" and "Suggested Dependencies"? I dunno! Just a thought

CORS errors for some status pages

https://status.slack.com/ will fail with a CORS error, many others status pages have the same problem. This is a known issue since browser will block any server call that is not initiated from the same domain when the server does not allow CORS. I've encountered this issue many times, there is no easy way around it!

I can think only about 2 options:
1- See if RSS Feed helps
2- Create and use a proxy server

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.