Move errors, shift API to server-gated
This commit is contained in:
19
main.go
19
main.go
@@ -23,11 +23,13 @@ type PDPayload struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type PHandler struct {
|
type PHandler struct {
|
||||||
|
routingKey string
|
||||||
next http.Handler
|
next http.Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPHandler(next http.Handler) *PHandler {
|
func NewPHandler(routingKey string, next http.Handler) *PHandler {
|
||||||
return &PHandler{
|
return &PHandler{
|
||||||
|
routingKey: routingKey,
|
||||||
next: next,
|
next: next,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -39,6 +41,8 @@ func (ph *PHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Printf("%s %s", r.RemoteAddr, r.Form.Encode())
|
||||||
|
|
||||||
msg := r.Form.Get("msg")
|
msg := r.Form.Get("msg")
|
||||||
if msg == "" {
|
if msg == "" {
|
||||||
ph.next.ServeHTTP(w, r)
|
ph.next.ServeHTTP(w, r)
|
||||||
@@ -47,11 +51,11 @@ func (ph *PHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
err = json.NewEncoder(buf).Encode(PDAlert{
|
err = json.NewEncoder(buf).Encode(PDAlert{
|
||||||
RoutingKey: "63e451a6e5f84309d08d439bfe5efab5",
|
RoutingKey: ph.routingKey,
|
||||||
EventAction: "trigger",
|
EventAction: "trigger",
|
||||||
Payload: PDPayload{
|
Payload: PDPayload{
|
||||||
Summary: msg,
|
Summary: msg,
|
||||||
Source: "urlparam",
|
Source: r.RemoteAddr,
|
||||||
Severity: "critical",
|
Severity: "critical",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -87,7 +91,12 @@ func (ph *PHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
http.Handle("/", NewPHandler(http.FileServer(http.Dir("./static"))))
|
routingKey := os.Getenv("PD_ROUTING_KEY")
|
||||||
|
if routingKey == "" {
|
||||||
|
log.Fatalf("please set PD_ROUTING_KEY")
|
||||||
|
}
|
||||||
|
|
||||||
|
http.Handle("/", NewPHandler(routingKey, http.FileServer(http.Dir("./static"))))
|
||||||
|
|
||||||
port := os.Getenv("PORT")
|
port := os.Getenv("PORT")
|
||||||
if port == "" {
|
if port == "" {
|
||||||
@@ -98,6 +107,6 @@ func main() {
|
|||||||
log.Printf("listening on %s", bind)
|
log.Printf("listening on %s", bind)
|
||||||
|
|
||||||
if err := http.ListenAndServe(bind, nil); err != nil {
|
if err := http.ListenAndServe(bind, nil); err != nil {
|
||||||
panic(err)
|
log.Fatalf("listen: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ body {
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<title>Page Ian</title>
|
<title>Page Ian</title>
|
||||||
<link rel="icon" href="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZpZXdCb3g9IjAgMCAxMDIuMzQ0IDkzLjMxMDUiPgogPGc+CiAgPHJlY3QgaGVpZ2h0PSI5My4zMTA1IiBvcGFjaXR5PSIwIiB3aWR0aD0iMTAyLjM0NCIgeD0iMCIgeT0iMCIvPgogIDxwYXRoIGQ9Ik0xMy4zMzAxIDkyLjc3MzRMODkuMDEzNyA5Mi43NzM0Qzk3LjMxNDUgOTIuNzczNCAxMDIuMzQ0IDg3LjAxMTcgMTAyLjM0NCA3OS41NDFDMTAyLjM0NCA3Ny4yNDYxIDEwMS42NiA3NC44NTM1IDEwMC40MzkgNzIuNzA1MUw2Mi41NDg4IDYuNjg5NDVDNjAuMDA5OCAyLjI0NjA5IDU1LjY2NDEgMCA1MS4xNzE5IDBDNDYuNjc5NyAwIDQyLjI4NTIgMi4yNDYwOSAzOS43OTQ5IDYuNjg5NDVMMS45MDQzIDcyLjcwNTFDMC41ODU5MzggNzQuOTAyMyAwIDc3LjI0NjEgMCA3OS41NDFDMCA4Ny4wMTE3IDUuMDI5MyA5Mi43NzM0IDEzLjMzMDEgOTIuNzczNFoiIGZpbGw9IiNmZjQ1M2EiLz4KICA8cGF0aCBkPSJNNTEuMjIwNyA2MC4xNTYyQzQ4LjY4MTYgNjAuMTU2MiA0Ny4yNjU2IDU4LjY5MTQgNDcuMjE2OCA1Ni4xMDM1TDQ2LjU4MiAyOS41NDFDNDYuNTMzMiAyNi45NTMxIDQ4LjQzNzUgMjUuMDk3NyA1MS4xNzE5IDI1LjA5NzdDNTMuODA4NiAyNS4wOTc3IDU1Ljg1OTQgMjcuMDAyIDU1LjgxMDUgMjkuNTg5OEw1NS4wNzgxIDU2LjEwMzVDNTUuMDI5MyA1OC43NDAyIDUzLjYxMzMgNjAuMTU2MiA1MS4yMjA3IDYwLjE1NjJaTTUxLjIyMDcgNzYuNTEzN0M0OC4yOTEgNzYuNTEzNyA0NS43NTIgNzQuMTY5OSA0NS43NTIgNzEuMjg5MUM0NS43NTIgNjguMzU5NCA0OC4yNDIyIDY2LjAxNTYgNTEuMjIwNyA2Ni4wMTU2QzU0LjE1MDQgNjYuMDE1NiA1Ni42NDA2IDY4LjMxMDUgNTYuNjQwNiA3MS4yODkxQzU2LjY0MDYgNzQuMjE4OCA1NC4xMDE2IDc2LjUxMzcgNTEuMjIwNyA3Ni41MTM3WiIgZmlsbD0iYmxhY2siLz4KIDwvZz4KPC9zdmc+Cg==" />
|
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZpZXdCb3g9IjAgMCAxMDIuMzQ0IDkzLjMxMDUiPgogPGc+CiAgPHJlY3QgaGVpZ2h0PSI5My4zMTA1IiBvcGFjaXR5PSIwIiB3aWR0aD0iMTAyLjM0NCIgeD0iMCIgeT0iMCIvPgogIDxwYXRoIGQ9Ik0xMy4zMzAxIDkyLjc3MzRMODkuMDEzNyA5Mi43NzM0Qzk3LjMxNDUgOTIuNzczNCAxMDIuMzQ0IDg3LjAxMTcgMTAyLjM0NCA3OS41NDFDMTAyLjM0NCA3Ny4yNDYxIDEwMS42NiA3NC44NTM1IDEwMC40MzkgNzIuNzA1MUw2Mi41NDg4IDYuNjg5NDVDNjAuMDA5OCAyLjI0NjA5IDU1LjY2NDEgMCA1MS4xNzE5IDBDNDYuNjc5NyAwIDQyLjI4NTIgMi4yNDYwOSAzOS43OTQ5IDYuNjg5NDVMMS45MDQzIDcyLjcwNTFDMC41ODU5MzggNzQuOTAyMyAwIDc3LjI0NjEgMCA3OS41NDFDMCA4Ny4wMTE3IDUuMDI5MyA5Mi43NzM0IDEzLjMzMDEgOTIuNzczNFoiIGZpbGw9IiNmZjQ1M2EiLz4KICA8cGF0aCBkPSJNNTEuMjIwNyA2MC4xNTYyQzQ4LjY4MTYgNjAuMTU2MiA0Ny4yNjU2IDU4LjY5MTQgNDcuMjE2OCA1Ni4xMDM1TDQ2LjU4MiAyOS41NDFDNDYuNTMzMiAyNi45NTMxIDQ4LjQzNzUgMjUuMDk3NyA1MS4xNzE5IDI1LjA5NzdDNTMuODA4NiAyNS4wOTc3IDU1Ljg1OTQgMjcuMDAyIDU1LjgxMDUgMjkuNTg5OEw1NS4wNzgxIDU2LjEwMzVDNTUuMDI5MyA1OC43NDAyIDUzLjYxMzMgNjAuMTU2MiA1MS4yMjA3IDYwLjE1NjJaTTUxLjIyMDcgNzYuNTEzN0M0OC4yOTEgNzYuNTEzNyA0NS43NTIgNzQuMTY5OSA0NS43NTIgNzEuMjg5MUM0NS43NTIgNjguMzU5NCA0OC4yNDIyIDY2LjAxNTYgNTEuMjIwNyA2Ni4wMTU2QzU0LjE1MDQgNjYuMDE1NiA1Ni42NDA2IDY4LjMxMDUgNTYuNjQwNiA3MS4yODkxQzU2LjY0MDYgNzQuMjE4OCA1NC4xMDE2IDc2LjUxMzcgNTEuMjIwNyA3Ni41MTM3WiIgZmlsbD0iYmxhY2siLz4KIDwvZz4KPC9zdmc+Cg==" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.18.0/cdn/themes/dark.css" />
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.18.0/cdn/themes/dark.css" />
|
||||||
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.18.0/cdn/shoelace-autoloader.js"></script>
|
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.18.0/cdn/shoelace-autoloader.js"></script>
|
||||||
@@ -42,24 +42,23 @@ async function pageIan() {
|
|||||||
|
|
||||||
clearAlerts();
|
clearAlerts();
|
||||||
|
|
||||||
|
const params = new URLSearchParams({
|
||||||
|
msg: msg,
|
||||||
|
});
|
||||||
|
|
||||||
const resp = await fetch(
|
const resp = await fetch(
|
||||||
'https://events.pagerduty.com/v2/enqueue',
|
'.',
|
||||||
{
|
{
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: JSON.stringify({
|
headers: {
|
||||||
payload: {
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||||||
severity: 'critical',
|
|
||||||
source: 'jsapp',
|
|
||||||
summary: msg,
|
|
||||||
},
|
},
|
||||||
routing_key: '63e451a6e5f84309d08d439bfe5efab5',
|
body: params.toString(),
|
||||||
event_action: 'trigger',
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!resp.ok) {
|
if (!resp.ok) {
|
||||||
error('Failed to send page', (await resp.json()).message);
|
error('Failed to send page', await resp.text());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,6 +68,13 @@ async function pageIan() {
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div style="width: min(500px, 100vw)">
|
<div style="width: min(500px, 100vw)">
|
||||||
|
<sl-textarea id="message" placeholder="Message" oninput="clearAlerts()"></sl-textarea>
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<div style="text-align: center">
|
||||||
|
<sl-button type="submit" variant="primary" onclick="pageIan()">Page Ian</sl-button>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
<sl-alert id="err" variant="danger">
|
<sl-alert id="err" variant="danger">
|
||||||
<sl-icon slot="icon" name="exclamation-octagon"></sl-icon>
|
<sl-icon slot="icon" name="exclamation-octagon"></sl-icon>
|
||||||
<strong id="err1"></strong><br />
|
<strong id="err1"></strong><br />
|
||||||
@@ -78,13 +84,6 @@ async function pageIan() {
|
|||||||
<sl-icon slot="icon" name="check2-circle"></sl-icon>
|
<sl-icon slot="icon" name="check2-circle"></sl-icon>
|
||||||
<strong>Page sent</strong>
|
<strong>Page sent</strong>
|
||||||
</sl-alert>
|
</sl-alert>
|
||||||
<br />
|
|
||||||
<sl-textarea id="message" placeholder="Message" oninput="clearAlerts()"></sl-textarea>
|
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
<div style="text-align: center">
|
|
||||||
<sl-button type="submit" variant="primary" onclick="pageIan()">Page Ian</sl-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user