Help
RSS
API
Feed
Maltego
Contact
Domain > status.punktum.dk
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-10-11
18.161.6.7
(
ClassC
)
2025-05-16
3.169.183.34
(
ClassC
)
2026-01-22
18.161.6.63
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Thu, 22 Jan 2026 18:37:17 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://status.punktum.dk/X-Cache: Redirect from cloudfrontVia: 1.1 773bf3616e85ce2b187fa78710a6beb2.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P1X-Amz-Cf-Id: YFbVAvx-FV2gKxuxhDgzvBj3cEJv-Y8YmEQa4g5F47PuECED0KeVkw html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/html; charsetutf-8Transfer-Encoding: chunkedConnection: keep-aliveDate: Thu, 22 Jan 2026 18:37:17 GMTX-Download-Options: noopenX-Permitted-Cross-Domain-Policies: noneReferrer-Policy: strict-origin-when-cross-originX-Statuspage-Version: f0dbfba88cb466056255b9f40843b4dc100ae358Strict-Transport-Security: max-age259200X-Statuspage-Skip-Logging: trueAccess-Control-Allow-Origin: *Cache-Control: max-age3, public, stale-while-revalidate30, stale-if-error3600Link: https://dka575ofm4ao0.cloudfront.net/assets/register_subscription_form-589b657fec607087fc5c740c568270907310bc4f6aaa20256e70f01b103025ca.js>; relpreload; asscript; nopush,https://dka575ofm4ao0.cloudfront.net/assets/status_common-a86dffb81955091741c3de8bded6ce66ae0c6d8f736b57b580f853d9f892727e.js>; relpreload; asscript; nopush,https://dka575ofm4ao0.cloudfront.net/assets/vendor/highstock.min-a7181c8f093438143dae37524f8463a97e2503789bc322732d3141f2c00c1c1a.js>; relpreload; asscript; nopush,https://dka575ofm4ao0.cloudfront.net/packs/0.3196e1790c0547398277.css>; relpreload; asstyle; nopush,https://dka575ofm4ao0.cloudfront.net/assets/status/status_manifest-51905443bbfe61223eaea38cbf08b789e674d8721a1447b6649eecf417e904a7.css>; relpreload; asstyle; nopush,https://dka575ofm4ao0.cloudfront.net/assets/jquery-3.5.1.min-729e416557a365062a8a20f0562f18aa171da57298005d392312670c706c68de.js>; relpreload; asscript; nopush,https://dka575ofm4ao0.cloudfront.net/assets/status_manifest-acb69ae7e67a6c4167b2544bef9249ec03b50cdd6c9a198592162f175e04b891.js>; relpreload; asscript; nopush,https://dka575ofm4ao0.cloudfront.net/packs/common-4437b1edb40d550663e6.chunk.js>; relpreload; asscript; nopush,https://dka575ofm4ao0.cloudfront.net/packs/globals-f12471d5e878ec0f0705.chunk.js>; relpreload; asscript; nopush,https://dka575ofm4ao0.cloudfront.net/packs/runtime-08032479de648cdef21e.js>; relpreload; asscript; nopushX-Pollinator-Metadata-Service: status-page-web-pagesETag: W/c9e8b4779e9b4b9bd3c9d85c7a092bc6X-Runtime: 0.287580Server: AtlassianEdgeAccept-Ranges: bytesX-Content-Type-Options: nosniffX-Xss-Protection: 1; modeblockAtl-Traceid: d5558672aed242d5bfc5315771419b5dAtl-Request-Id: d5558672-aed2-42d5-bfc5-315771419b5dReport-To: {endpoints: {url: https://dz8aopenkvv6s.cloudfront.net}, group: endpoint-1, include_subdomains: true, max_age: 600}Nel: {failure_fraction: 0.01, include_subdomains: true, max_age: 600, report_to: endpoint-1}Server-Timing: atl-edge;dur378,atl-edge-internal;dur7,atl-edge-upstream;dur375,atl-edge-pop;descaws-us-east-1Vary: Accept,Accept-EncodingX-Cache: Miss from cloudfrontVia: 1.1 a87682502db4b394cc6ba84510da9f98.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P1X-Amz-Cf-Id: _xSU_pdEa2kPH0wiOx8U2SSI658pR6y1iwTwV8BXPdqidbHwdnl2YQ !DOCTYPE html>html langen> head> meta http-equivX-UA-Compatible contentIEedge> !-- force IE browsers in compatibility mode to use their most aggressive rendering engine --> meta charsetutf-8> title>.dk Status/title> meta namedescription contentWelcome to .dk's home for real-time and historical data on system performance.> !-- Mobile viewport optimization --> meta nameHandheldFriendly contentTrue> meta nameMobileOptimized content320> meta nameviewport contentwidthdevice-width, initial-scale1.0, minimum-scale1.0, maximum-scale1.0> !-- Time this page was rendered - http://purl.org/dc/terms/issued --> meta nameissued content1769107037> !-- Mobile IE allows us to activate ClearType technology for smoothing fonts for easy reading --> meta http-equivcleartype contenton> !-- Atlassian Sans & Mono Fonts -->link relpreconnect hrefhttps://ds-cdn.prod-east.frontend.public.atl-paas.net />link relpreload hrefhttps://ds-cdn.prod-east.frontend.public.atl-paas.net/assets/fonts/atlassian-sans/v3/AtlassianSans-latin.woff2 asfont typefont/woff2 crossorigin />link relpreload hrefhttps://ds-cdn.prod-east.frontend.public.atl-paas.net/assets/font-rules/v5/atlassian-fonts.css asstyle crossorigin /> style> /* Dynamic Font Stack based on Feature Flag */ /* Using Atlassian Sans & Mono */ :root { --font-stack-a: Atlassian Sans, Helvetica Neue, Helvetica, Arial, Sans-Serif; --font-stack-b: Atlassian Mono, SFMono-Medium, SF Mono, Segoe UI Mono, Roboto Mono, Ubuntu Mono, Menlo, Consolas, Courier, monospace; }/style> link relshortcut icon typeimage/x-icon href//dka575ofm4ao0.cloudfront.net/pages-favicon_logos/original/180378/logo_symbol_status.png /> link relshortcut icon href//dka575ofm4ao0.cloudfront.net/pages-favicon_logos/original/180378/logo_symbol_status.png> link relalternate typeapplication/atom+xml hrefhttps://status.punktum.dk/history.atom title.dk Status History - Atom Feed> link relalternate typeapplication/rss+xml hrefhttps://status.punktum.dk/history.rss title.dk Status History - RSS Feed> !-- Canonical Link to ensure that only the custom domain is indexed when present --> link relcanonical hrefhttps://status.punktum.dk> meta name_globalsign-domain-verification contenty_VzfckMy4iePo5oDJNivyYIjh8LffYa4jzUndm_bZ/> meta namerobots contentnoindex,nofollow> link relalternate typeapplication/atom+xml titleATOM hrefhttps://status.punktum.dk/history.atom /> !-- Le styles --> link relstylesheet mediascreen hrefhttps://dka575ofm4ao0.cloudfront.net/packs/0.3196e1790c0547398277.css /> link relstylesheet mediaall hrefhttps://dka575ofm4ao0.cloudfront.net/assets/status/status_manifest-51905443bbfe61223eaea38cbf08b789e674d8721a1447b6649eecf417e904a7.css /> script srchttps://dka575ofm4ao0.cloudfront.net/assets/jquery-3.5.1.min-729e416557a365062a8a20f0562f18aa171da57298005d392312670c706c68de.js>/script> script> window.pageColorData {blue:#3B5E9B,border:#E9E8E9,body_background:#FFFFFF,font:#333333,graph:#559C9E,green:#00AF6F,light_font:#A9A8A9,link:#0645AD,orange:#EF7521,red:#D72641,yellow:#FFCA36,no_data:#b3bac5}; /script> style> /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ body, .layout-content.status.status-api .section .example-container .example-opener .color-secondary, .grouped-items-selector, .layout-content.status.status-full-history .history-nav a.current, divid^subscribe-modal .modal-footer, divid^subscribe-modal, divid^updates-dropdown .updates-dropdown-section, #uptime-tooltip .tooltip-box { background-color:#FFFFFF; } #uptime-tooltip .pointer-container .pointer-smaller { border-bottom-color:#FFFFFF; } /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ body.status, .color-primary, .color-primary:hover, .layout-content.status-index .status-day .update-title.impact-none a, .layout-content.status-index .status-day .update-title.impact-none a:hover, .layout-content.status-index .timeframes-container .timeframe.active, .layout-content.status-full-history .month .incident-container .impact-none, .layout-content.status.status-index .incidents-list .incident-title.impact-none a, .incident-history .impact-none, .layout-content.status .grouped-items-selector.inline .grouped-item.active, .layout-content.status.status-full-history .history-nav a.current, .layout-content.status.status-full-history .history-nav a:not(.current):hover, divid^subscribe-modal .modal-header .close, .grouped-item-label, #uptime-tooltip .tooltip-box .tooltip-content .related-events .related-event a.related-event-link { color:#333333; } .layout-content.status.status-index .components-statuses .component-container .name { color:#333333; color:rgba(51,51,51,.8); } /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ small, .layout-content.status .table-row .date, .color-secondary, .layout-content.status .grouped-items-selector.inline .grouped-item, .layout-content.status.status-full-history .history-footer .pagination a.disabled, .layout-content.status.status-full-history .history-nav a, #uptime-tooltip .tooltip-box .tooltip-content .related-events #related-event-header { color:#A9A8A9; } /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ body.status .layout-content.status .border-color, hr, .tooltip-base, .markdown-display table, divid^subscribe-modal, #uptime-tooltip .tooltip-box { border-color:#E9E8E9; } divid^subscribe-modal .modal-footer, .markdown-display table td { border-top-color:#E9E8E9; } .markdown-display table td + td, .markdown-display table th + th { border-left-color:#E9E8E9; } divid^subscribe-modal .modal-header, #uptime-tooltip .pointer-container .pointer-larger { border-bottom-color:#E9E8E9; } #uptime-tooltip .tooltip-box .outage-field { /* Generate the background-color for the outage-field from the css_body_background_color and css_border_color. For the default background (#ffffff) and default css_border_color (#e0e0e0), use the luminosity of the default background with a magic number to arrive at the original outage-field background color (#f4f5f7). I used the formula Target Color Color * alpha + Background * (1 - alpha) to find the magic number of ~0.08. For darker css_body_background_color, luminosity values are lower so alpha trends toward becoming transparent (thus outage-field background becomes same as css_body_background_color). */ background-color: rgba(233,232,233,0.31); /* outage-field border-color alpha is inverse to the luminosity of css_body_background_color. That is to say, with a default white background this border is transparent, but on a black background, its opaque css_border_color. */ border-color: rgba(233,232,233,0.0); } /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ .layout-content.status.status-index .status-day .update-title.impact-critical a, .layout-content.status.status-index .status-day .update-title.impact-critical a:hover, .layout-content.status.status-index .page-status.status-critical, .layout-content.status.status-index .unresolved-incident.impact-critical .incident-title, .flat-button.background-red { background-color:#D72641; } .layout-content.status-index .components-statuses .component-container.status-red:after, .layout-content.status-full-history .month .incident-container .impact-critical, .layout-content.status-incident .incident-name.impact-critical, .layout-content.status.status-index .incidents-list .incident-title.impact-critical a, .status-red .icon-indicator, .incident-history .impact-critical, .components-container .component-inner-container.status-red .component-status, .components-container .component-inner-container.status-red .icon-indicator { color:#D72641; } .layout-content.status.status-index .unresolved-incident.impact-critical .updates { border-color:#D72641; } /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ .layout-content.status.status-index .status-day .update-title.impact-major a, .layout-content.status.status-index .status-day .update-title.impact-major a:hover, .layout-content.status.status-index .page-status.status-major, .layout-content.status.status-index .unresolved-incident.impact-major .incident-title { background-color:#EF7521; } .layout-content.status-index .components-statuses .component-container.status-orange:after, .layout-content.status-full-history .month .incident-container .impact-major, .layout-content.status-incident .incident-name.impact-major, .layout-content.status.status-index .incidents-list .incident-title.impact-major a, .status-orange .icon-indicator, .incident-history .impact-major, .components-container .component-inner-container.status-orange .component-status, .components-container .component-inner-container.status-orange .icon-indicator { color:#EF7521; } .layout-content.status.status-index .unresolved-incident.impact-major .updates { border-color:#EF7521; } /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ .layout-content.status.status-index .status-day .update-title.impact-minor a, .layout-content.status.status-index .status-day .update-title.impact-minor a:hover, .layout-content.status.status-index .page-status.status-minor, .layout-content.status.status-index .unresolved-incident.impact-minor .incident-title, .layout-content.status.status-index .scheduled-incidents-container .tab { background-color:#FFCA36; } .layout-content.status-index .components-statuses .component-container.status-yellow:after, .layout-content.status-full-history .month .incident-container .impact-minor, .layout-content.status-incident .incident-name.impact-minor, .layout-content.status.status-index .incidents-list .incident-title.impact-minor a, .status-yellow .icon-indicator, .incident-history .impact-minor, .components-container .component-inner-container.status-yellow .component-status, .components-container .component-inner-container.status-yellow .icon-indicator, .layout-content.status.manage-subscriptions .confirmation-infobox .fa { color:#FFCA36; } .layout-content.status.status-index .unresolved-incident.impact-minor .updates, .layout-content.status.status-index .scheduled-incidents-container { border-color:#FFCA36; } /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ .layout-content.status.status-index .status-day .update-title.impact-maintenance a, .layout-content.status.status-index .status-day .update-title.impact-maintenance a:hover, .layout-content.status.status-index .page-status.status-maintenance, .layout-content.status.status-index .unresolved-incident.impact-maintenance .incident-title, .layout-content.status.status-index .scheduled-incidents-container .tab { background-color:#3B5E9B; } .layout-content.status-index .components-statuses .component-container.status-blue:after, .layout-content.status-full-history .month .incident-container .impact-maintenance, .layout-content.status-incident .incident-name.impact-maintenance, .layout-content.status.status-index .incidents-list .incident-title.impact-maintenance a, .status-blue .icon-indicator, .incident-history .impact-maintenance, .components-container .component-inner-container.status-blue .component-status, .components-container .component-inner-container.status-blue .icon-indicator { color:#3B5E9B; } .layout-content.status.status-index .unresolved-incident.impact-maintenance .updates, .layout-content.status.status-index .scheduled-incidents-container { border-color:#3B5E9B; } /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ .layout-content.status.status-index .page-status.status-none { background-color:#00AF6F; } .layout-content.status-index .components-statuses .component-container.status-green:after, .status-green .icon-indicator, .components-container .component-inner-container.status-green .component-status, .components-container .component-inner-container.status-green .icon-indicator { color:#00AF6F; } /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ a, a:hover, .layout-content.status-index .page-footer span a:hover, .layout-content.status-index .timeframes-container .timeframe:not(.active):hover, .layout-content.status-incident .subheader a:hover { color:#0645AD; } .flat-button, .masthead .updates-dropdown-container .show-updates-dropdown, .layout-content.status-full-history .show-filter.open { background-color:#0645AD; } /* CUSTOM COLOR OVERRIDES FOR UPTIME SHOWCASE */ .components-section .components-uptime-link { color: #a9a8a9; } .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item { color: #a9a8a9; opacity: 1; } .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item.light { color: #a9a8a9; opacity: 1; } .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .spacer { background: #a9a8a9; opacity: 1; }/style> !-- custom css --> !-- polyfills --> script crossoriginanonymous srchttps://cdnjs.cloudflare.com/polyfill/v3/polyfill.js>/script> !-- Le HTML5 shim --> !--if lt IE 9> script src//html5shim.googlecode.com/svn/trunk/html5.js>/script> !endif--> !-- injection for static --> /head> body classstatus index status-none> div classlayout-content status status-index starter> div classmasthead-container basic> div classmasthead has-logo> div classlogo-container> a hrefhttps://punktum.dk>img alt.dk logo src//dka575ofm4ao0.cloudfront.net/pages-transactional_logos/retina/180378/DK_Hostmaster-symbol-RGB.png />/a> /div> div classupdates-dropdown-container data-js-hookupdates-dropdown-container> a href# data-js-hookshow-updates-dropdown idshow-updates-dropdown classshow-updates-dropdown aria-labelSubscribe to updates aria-expandedfalse aria-haspopupdialog rolebutton> span classsubscribe-text-full>Subscribe to Updates/span>span classsubscribe-text-short>Subscribe/span> /a>!-- Accessibility guidelines for tabs: https://www.w3.org/TR/wai-aria-practices-1.1/examples/tabs/tabs-1/tabs.html --> div classupdates-dropdown data-js-hookupdates-dropdown idupdates-dropdown styledisplay:none roledialog aria-modalfalse aria-labelSubscribe to updates> div classupdates-dropdown-nav nav-items-7 roletablist aria-labelSubscribe to updates> a href#updates-dropdown-email aria-controlsupdates-dropdown-email aria-labelSubscribe via email roletab aria-selectedtrue idupdates-dropdown-email-btn> span classicon-container email> /a> a href#updates-dropdown-sms aria-controlsupdates-dropdown-sms aria-labelSubscribe via SMS roletab idupdates-dropdown-sms-btn> span classicon-container sms> /a> a href#updates-dropdown-slack aria-controlsupdates-dropdown-slack aria-labelSubscribe via slack roletab idupdates-dropdown-slack-btn> span classicon-container slack> /a> a href#updates-dropdown-webhook aria-controlsupdates-dropdown-webhook aria-labelSubscribe via webhook roletab idupdates-dropdown-webhook-btn> span classicon-container webhook> /a> a href#updates-dropdown-support aria-controlsupdates-dropdown-support aria-labelContact support roletab idupdates-dropdown-support-btn> span classicon-container support> /a> a href#updates-dropdown-atom aria-controlsupdates-dropdown-atom aria-labelSubscribe via RSS roletab idupdates-dropdown-atom-btn> span classicon-container rss> /a> button data-js-hookupdates-dropdown-close aria-labelClose subscribe form idupdates-dropdown-close-btn> x /button> /div> div classupdates-dropdown-sections-container> div classupdates-dropdown-section email idupdates-dropdown-email styledisplay:none roletabpanel aria-labelledbyupdates-dropdown-email-btn> div classdirections> Get email notifications whenever .dk strong>creates/strong>, strong>updates/strong> or strong>resolves/strong> an incident. /div> form idsubscribe-form-email action/subscriptions/new-email accept-charsetUTF-8 data-remotetrue methodpost> input typehidden nameemail_otp_verify_flow idemail_otp_verify_flow valuefalse autocompleteoff /> !-- make sure not to put cookie values in here since this gets cached --> label foremail>Email address:/label> input nameemail idemail typetext classfull-width data-js-hookemail-notification-field autocompleteemail> input nameemail_otp_auth_token typehidden idemail-otp-token-field> div classopt-container-section idemail-otp-container, styledisplay:none > label foremail-otp>Enter OTP:/label> input nameotp idemail-otp typetext value classprepend full-width> p idemail-otp-timer>Resend OTP in: span idemail-otp-countdown>/span> seconds /p> p idresend-email-otp> Didnt receive the OTP? a href# idresend-email-otp-btn >Resend OTP /a> /p> /div> input typehidden namecaptcha_error idcaptcha_error valuefalse autocompleteoff /> input typesubmit valueSubscribe via Email classflat-button full-width g-recaptcha idsubscribe-btn-email data-disabled-textSubscribing... data-sitekey6LdTS8AUAAAAAOIbCKoCAP4LQku1olYGrywPTaZz data-callbacksubmitNewEmailSubscriber data-error-callbackemailSubscriberCaptchaError > div classterms_and_privacy_information bottom small>div classprivacy_policy_information small>By subscribing you agree to our a target_blank relnoopener classaccessible-link hrefhttps://punktum.dk/en/articles/privacy-policy>Privacy Policy/a>./div> This site is protected by reCAPTCHA and the Google a target_blank relnoopener classaccessible-link hrefhttps://policies.google.com/privacy>Privacy Policy/a> and a target_blank relnoopener classaccessible-link data-js-hookcaptcha-terms-of-service-link hrefhttps://policies.google.com/terms>Terms of Service/a> apply./div>/form> /div> div classupdates-dropdown-section phone idupdates-dropdown-sms styledisplay:none roletabpanel aria-labelledbyupdates-dropdown-sms-btn> div classdirections> Get text message notifications whenever .dk strong>creates/strong> or strong>resolves/strong> an incident. /div> form idsubscribe-form-sms action/subscriptions/new-sms accept-charsetUTF-8 data-remotetrue methodpost> input typehidden nameotp_verify_flow idotp_verify_flow valuefalse autocompleteoff /> input typehidden namesubscriber_code idsubscriber_code value autocompleteoff /> div classcontrol-group> div classcontrols externalities-sms-container> !-- make sure not to put cookie values in here since this gets cached --> label forphone-country>Country code:/label> div idphone-number-country-code classphone-country-wrapper data-otp-enabledfalse> select namephone_country idphone-country data-js-hookphone-country classphone-country>option valueaf data-otp-enabledfalse >Afghanistan (+93)/option>option valueal data-otp-enabledfalse >Albania (+355)/option>option valuedz data-otp-enabledfalse >Algeria (+213)/option>option valueas data-otp-enabledfalse >American Samoa (+1)/option>option valuead data-otp-enabledfalse >Andorra (+376)/option>option valueao data-otp-enabledfalse >Angola (+244)/option>option valueai data-otp-enabledfalse >Anguilla (+1)/option>option valueag data-otp-enabledfalse >Antigua and Barbuda (+1)/option>option valuear data-otp-enabledfalse >Argentina (+54)/option>option valueam data-otp-enabledfalse >Armenia (+374)/option>option valueaw data-otp-enabledfalse >Aruba (+297)/option>option valueau data-otp-enabledfalse >Australia/Cocos/Christmas Island (+61)/option>option valueat data-otp-enabledfalse >Austria (+43)/option>option valueaz data-otp-enabledfalse >Azerbaijan (+994)/option>option valuebs data-otp-enabledfalse >Bahamas (+1)/option>option valuebh data-otp-enabledfalse >Bahrain (+973)/option>option valuebd data-otp-enabledfalse >Bangladesh (+880)/option>option valuebb data-otp-enabledfalse >Barbados (+1)/option>option valueby data-otp-enabledfalse >Belarus (+375)/option>option valuebe data-otp-enabledfalse >Belgium (+32)/option>option valuebz data-otp-enabledfalse >Belize (+501)/option>option valuebj data-otp-enabledfalse >Benin (+229)/option>option valuebm data-otp-enabledfalse >Bermuda (+1)/option>option valuebo data-otp-enabledfalse >Bolivia (+591)/option>option valueba data-otp-enabledfalse >Bosnia and Herzegovina (+387)/option>option valuebw data-otp-enabledfalse >Botswana (+267)/option>option valuebr data-otp-enabledfalse >Brazil (+55)/option>option valuebn data-otp-enabledfalse >Brunei (+673)/option>option valuebg data-otp-enabledfalse >Bulgaria (+359)/option>option valuebf data-otp-enabledfalse >Burkina Faso (+226)/option>option valuebi data-otp-enabledfalse >Burundi (+257)/option>option valuekh data-otp-enabledfalse >Cambodia (+855)/option>option valuecm data-otp-enabledfalse >Cameroon (+237)/option>option valueca data-otp-enabledfalse >Canada (+1)/option>option valuecv data-otp-enabledfalse >Cape Verde (+238)/option>option valueky data-otp-enabledfalse >Cayman Islands (+1)/option>option valuecf data-otp-enabledfalse >Central Africa (+236)/option>option valuetd data-otp-enabledfalse >Chad (+235)/option>option valuecl data-otp-enabledfalse >Chile (+56)/option>option valuecn data-otp-enabledfalse >China (+86)/option>option valueco data-otp-enabledfalse >Colombia (+57)/option>option valuekm data-otp-enabledfalse >Comoros (+269)/option>option valuecg data-otp-enabledfalse >Congo (+242)/option>option valuecd data-otp-enabledfalse >Congo, Dem Rep (+243)/option>option valuecr data-otp-enabledfalse >Costa Rica (+506)/option>option valuehr data-otp-enabledfalse >Croatia (+385)/option>option valuecy data-otp-enabledfalse >Cyprus (+357)/option>option valuecz data-otp-enabledfalse >Czech Republic (+420)/option>option valuedk data-otp-enabledfalse selected>Denmark (+45)/option>option valuedj data-otp-enabledfalse >Djibouti (+253)/option>option valuedm data-otp-enabledfalse >Dominica (+1)/option>option valuedo data-otp-enabledfalse >Dominican Republic (+1)/option>option valueeg data-otp-enabledfalse >Egypt (+20)/option>option valuesv data-otp-enabledfalse >El Salvador (+503)/option>option valuegq data-otp-enabledfalse >Equatorial Guinea (+240)/option>option valueee data-otp-enabledfalse >Estonia (+372)/option>option valueet data-otp-enabledfalse >Ethiopia (+251)/option>option valuefo data-otp-enabledfalse >Faroe Islands (+298)/option>option valuefj data-otp-enabledfalse >Fiji (+679)/option>option valuefi data-otp-enabledfalse >Finland/Aland Islands (+358)/option>option valuefr data-otp-enabledfalse >France (+33)/option>option valuegf data-otp-enabledfalse >French Guiana (+594)/option>option valuepf data-otp-enabledfalse >French Polynesia (+689)/option>option valuega data-otp-enabledfalse >Gabon (+241)/option>option valuegm data-otp-enabledfalse >Gambia (+220)/option>option valuege data-otp-enabledfalse >Georgia (+995)/option>option valuede data-otp-enabledfalse >Germany (+49)/option>option valuegh data-otp-enabledfalse >Ghana (+233)/option>option valuegi data-otp-enabledfalse >Gibraltar (+350)/option>option valuegr data-otp-enabledfalse >Greece (+30)/option>option valuegl data-otp-enabledfalse >Greenland (+299)/option>option valuegd data-otp-enabledfalse >Grenada (+1)/option>option valuegp data-otp-enabledfalse >Guadeloupe (+590)/option>option valuegu data-otp-enabledfalse >Guam (+1)/option>option valuegt data-otp-enabledfalse >Guatemala (+502)/option>option valuegn data-otp-enabledfalse >Guinea (+224)/option>option valuegy data-otp-enabledfalse >Guyana (+592)/option>option valueht data-otp-enabledfalse >Haiti (+509)/option>option valuehn data-otp-enabledfalse >Honduras (+504)/option>option valuehk data-otp-enabledfalse >Hong Kong (+852)/option>option valuehu data-otp-enabledfalse >Hungary (+36)/option>option valueis data-otp-enabledfalse >Iceland (+354)/option>option valuein data-otp-enabledfalse >India (+91)/option>option valueid data-otp-enabledfalse >Indonesia (+62)/option>option valueiq data-otp-enabledfalse >Iraq (+964)/option>option valueie data-otp-enabledfalse >Ireland (+353)/option>option valueil data-otp-enabledfalse >Israel (+972)/option>option valueit data-otp-enabledfalse >Italy (+39)/option>option valuejm data-otp-enabledfalse >Jamaica (+1)/option>option valuejp data-otp-enabledfalse >Japan (+81)/option>option valuejo data-otp-enabledfalse >Jordan (+962)/option>option valueke data-otp-enabledfalse >Kenya (+254)/option>option valuekr data-otp-enabledfalse >Korea, Republic of (+82)/option>option valuexk data-otp-enabledfalse >Kosovo (+383)/option>option valuekw data-otp-enabledfalse >Kuwait (+965)/option>option valuekg data-otp-enabledfalse >Kyrgyzstan (+996)/option>option valuela data-otp-enabledfalse >Laos (+856)/option>option valuelv data-otp-enabledfalse >Latvia (+371)/option>option valuelb data-otp-enabledfalse >Lebanon (+961)/option>option valuels data-otp-enabledfalse >Lesotho (+266)/option>option valuelr data-otp-enabledfalse >Liberia (+231)/option>option valuely data-otp-enabledfalse >Libya (+218)/option>option valueli data-otp-enabledfalse >Liechtenstein (+423)/option>option valuelt data-otp-enabledfalse >Lithuania (+370)/option>option valuelu data-otp-enabledfalse >Luxembourg (+352)/option>option valuemo data-otp-enabledfalse >Macao (+853)/option>option valuemk data-otp-enabledfalse >Macedonia (+389)/option>option valuemg data-otp-enabledfalse >Madagascar (+261)/option>option valuemw data-otp-enabledfalse >Malawi (+265)/option>option valuemy data-otp-enabledfalse >Malaysia (+60)/option>option valuemv data-otp-enabledfalse >Maldives (+960)/option>option valueml data-otp-enabledfalse >Mali (+223)/option>option valuemt data-otp-enabledfalse >Malta (+356)/option>option valuemq data-otp-enabledfalse >Martinique (+596)/option>option valuemr data-otp-enabledfalse >Mauritania (+222)/option>option valuemu data-otp-enabledfalse >Mauritius (+230)/option>option valuemx data-otp-enabledfalse >Mexico (+52)/option>option valuemc data-otp-enabledfalse >Monaco (+377)/option>option valuemn data-otp-enabledfalse >Mongolia (+976)/option>option valueme data-otp-enabledfalse >Montenegro (+382)/option>option valuems data-otp-enabledfalse >Montserrat (+1)/option>option valuema data-otp-enabledfalse >Morocco/Western Sahara (+212)/option>option valuemz data-otp-enabledfalse >Mozambique (+258)/option>option valuena data-otp-enabledfalse >Namibia (+264)/option>option valuenp data-otp-enabledfalse >Nepal (+977)/option>option valuenl data-otp-enabledfalse >Netherlands (+31)/option>option valuenz data-otp-enabledfalse >New Zealand (+64)/option>option valueni data-otp-enabledfalse >Nicaragua (+505)/option>option valuene data-otp-enabledfalse >Niger (+227)/option>option valueng data-otp-enabledfalse >Nigeria (+234)/option>option valueno data-otp-enabledfalse >Norway (+47)/option>option valueom data-otp-enabledfalse >Oman (+968)/option>option valuepk data-otp-enabledfalse >Pakistan (+92)/option>option valueps data-otp-enabledfalse >Palestinian Territory (+970)/option>option valuepa data-otp-enabledfalse >Panama (+507)/option>option valuepy data-otp-enabledfalse >Paraguay (+595)/option>option valuepe data-otp-enabledfalse >Peru (+51)/option>option valueph data-otp-enabledfalse >Philippines (+63)/option>option valuepl data-otp-enabledfalse >Poland (+48)/option>option valuept data-otp-enabledfalse >Portugal (+351)/option>option valuepr data-otp-enabledfalse >Puerto Rico (+1)/option>option valueqa data-otp-enabledfalse >Qatar (+974)/option>option valuere data-otp-enabledfalse >Reunion/Mayotte (+262)/option>option valuero data-otp-enabledfalse >Romania (+40)/option>option valueru data-otp-enabledfalse >Russia/Kazakhstan (+7)/option>option valuerw data-otp-enabledfalse >Rwanda (+250)/option>option valuews data-otp-enabledfalse >Samoa (+685)/option>option valuesm data-otp-enabledfalse >San Marino (+378)/option>option valuesa data-otp-enabledfalse >Saudi Arabia (+966)/option>option valuesn data-otp-enabledfalse >Senegal (+221)/option>option valuers data-otp-enabledfalse >Serbia (+381)/option>option valuesc data-otp-enabledfalse >Seychelles (+248)/option>option valuesl data-otp-enabledfalse >Sierra Leone (+232)/option>option valuesg data-otp-enabledfalse >Singapore (+65)/option>option valuesk data-otp-enabledfalse >Slovakia (+421)/option>option valuesi data-otp-enabledfalse >Slovenia (+386)/option>option valueza data-otp-enabledfalse >South Africa (+27)/option>option valuees data-otp-enabledfalse >Spain (+34)/option>option valuelk data-otp-enabledfalse >Sri Lanka (+94)/option>option valuekn data-otp-enabledfalse >St Kitts and Nevis (+1)/option>option valuelc data-otp-enabledfalse >St Lucia (+1)/option>option valuevc data-otp-enabledfalse >St Vincent Grenadines (+1)/option>option valuesd data-otp-enabledfalse >Sudan (+249)/option>option valuesr data-otp-enabledfalse >Suriname (+597)/option>option valuesz data-otp-enabledfalse >Swaziland (+268)/option>option valuese data-otp-enabledfalse >Sweden (+46)/option>option valuech data-otp-enabledfalse >Switzerland (+41)/option>option valuetw data-otp-enabledfalse >Taiwan (+886)/option>option valuetj data-otp-enabledfalse >Tajikistan (+992)/option>option valuetz data-otp-enabledfalse >Tanzania (+255)/option>option valueth data-otp-enabledfalse >Thailand (+66)/option>option valuetg data-otp-enabledfalse >Togo (+228)/option>option valueto data-otp-enabledfalse >Tonga (+676)/option>option valuett data-otp-enabledfalse >Trinidad and Tobago (+1)/option>option valuetn data-otp-enabledfalse >Tunisia (+216)/option>option valuetr data-otp-enabledfalse >Turkey (+90)/option>option valuetc data-otp-enabledfalse >Turks and Caicos Islands (+1)/option>option valueug data-otp-enabledfalse >Uganda (+256)/option>option valueua data-otp-enabledfalse >Ukraine (+380)/option>option valueae data-otp-enabledfalse >United Arab Emirates (+971)/option>option valuegb data-otp-enabledfalse >United Kingdom (+44)/option>option valueus data-otp-enabledfalse >United States (+1)/option>option valueuy data-otp-enabledfalse >Uruguay (+598)/option>option valueuz data-otp-enabledfalse >Uzbekistan (+998)/option>option valueve data-otp-enabledfalse >Venezuela (+58)/option>option valuevn data-otp-enabledfalse >Vietnam (+84)/option>option valuevg data-otp-enabledfalse >Virgin Islands, British (+1)/option>option valuevi data-otp-enabledfalse >Virgin Islands, U.S. (+1)/option>option valueye data-otp-enabledfalse >Yemen (+967)/option>option valuezm data-otp-enabledfalse >Zambia (+260)/option>option valuezw data-otp-enabledfalse >Zimbabwe (+263)/option>/select> /div> label forphone-number>Phone number:/label> input namephone_number idphone-number typetext classprepend full-width data-js-hooksms-notification-field> div classsms-atl-error idsms-atl-error>/div> div classclearfix>/div> div classopt-container-section idotp-container styledisplay:none> a href# idbtn-subcriber-change-number>Change number/a> label forotp>Enter OTP:/label> input nameotp idotp typetext classprepend full-width> p idtimer>Resend OTP in: span idcountdown>30/span> seconds /p> p idresend> Didnt receive the OTP? a href# idresend-otp-btn >Resend OTP /a> /p> /div> /div> /div> input typehidden namecaptcha_error idcaptcha_error valuefalse autocompleteoff /> input typesubmit valueSubscribe via Text Message classflat-button full-width g-recaptcha idsubscribe-btn-sms data-disabled-textSubscribing... data-sitekey6LcH-b0UAAAAACVQtMb14LBhflMA9y0Nmu7l_W6d data-callbacksubmitNewSmsSubscriber data-error-callbacksmsSubscriberCaptchaError> div classterms_and_privacy_information bottom small>Message and data rates may apply. By subscribing you agree to our a target_blank relnoopener classaccessible-link hrefhttps://punktum.dk/en/articles/privacy-policy>Privacy Policy/a>, the Atlassian a target_blank relnoopener classaccessible-link hrefhttps://www.atlassian.com/legal/product-specific-terms#statuspage-specific-terms>Terms of Service/a>, and the Atlassian a target_blank relnoopener classaccessible-link hrefhttps://www.atlassian.com/legal/privacy-policy>Privacy Policy/a>. This site is protected by reCAPTCHA and the Google a target_blank relnoopener classaccessible-link hrefhttps://policies.google.com/privacy>Privacy Policy/a> and a target_blank relnoopener classaccessible-link data-js-hookcaptcha-terms-of-service-link hrefhttps://policies.google.com/terms>Terms of Service/a> apply./div>/form> /div> div classupdates-dropdown-section slack idupdates-dropdown-slack styledisplay:none roletabpanel aria-labelledbyupdates-dropdown-slack-btn> div classdirections> Get incident updates and maintenance status messages in Slack. /div> a valueSubscribe via Slack classflat-button full-width idsubscribe-btn-slack data-disabled-textSubscribing... data-revert-on-successtrue stylemargin-top:.75rem hrefhttps://subscriptions.statuspage.io/slack_authentication/kickoff?page_code8s7q16bbmq6n>Subscribe via Slack/a> div classterms_and_privacy_information bottom small>By subscribing you acknowledge our a target_blank relnoopener classaccessible-link hrefhttps://punktum.dk/en/articles/privacy-policy>Privacy Policy/a>. In addition, you agree to the Atlassian a target_blank relnoopener classaccessible-link hrefhttps://www.atlassian.com/legal/cloud-terms-of-service>Cloud Terms of Service/a> and acknowledge Atlassians a target_blank relnoopener classaccessible-link hrefhttps://www.atlassian.com/legal/privacy-policy>Privacy Policy/a>./div> /div> div classupdates-dropdown-section webhook idupdates-dropdown-webhook styledisplay:none roletabpanel aria-labelledbyupdates-dropdown-webhook-btn> div classdirections> Get webhook notifications whenever .dk strong>creates/strong> an incident, strong>updates/strong> an incident, strong>resolves/strong> an incident or strong>changes/strong> a component status. /div> form idsubscribe-form-webhook action/subscriptions/webhook.json accept-charsetUTF-8 data-remotetrue methodpost> div classcontrol-group> div classcontrols> label forendpoint-webhooks>Webhook URL:/label> input typetext nameendpoint idendpoint-webhooks data-js-hookendpoint classfull-width aria-describedbyurl-help-block /> p classhelp-block idurl-help-block>The URL we should send the webhooks to/p> /div> /div> div classcontrol-group> div classcontrols> label foremail-webhooks>Email address:/label> input typetext nameemail idemail-webhooks data-js-hookemail classfull-width aria-describedbyemail-help-block /> p classhelp-block idemail-help-block>Well send you email if your endpoint fails/p> /div> /div> input typehidden namecaptcha_error idcaptcha_error valuefalse autocompleteoff /> input typesubmit valueSubscribe To Notifications classflat-button full-width g-recaptcha idsubscribe-btn-webhook data-disabled-textSubscribing... data-sitekey6LcQ-b0UAAAAAJjfdwO_-ozGC-CzWDj4Pm1kJ2Ah data-callbacksubmitNewWebhookSubscriber data-error-callbackwebhookSubscriberCaptchaError> div classterms_and_privacy_information bottom small>div classprivacy_policy_information small>By subscribing you agree to our a target_blank relnoopener classaccessible-link hrefhttps://punktum.dk/en/articles/privacy-policy>Privacy Policy/a>./div> This site is protected by reCAPTCHA and the Google a target_blank relnoopener classaccessible-link hrefhttps://policies.google.com/privacy>Privacy Policy/a> and a target_blank relnoopener classaccessible-link data-js-hookcaptcha-terms-of-service-link hrefhttps://policies.google.com/terms>Terms of Service/a> apply./div>/form> /div> div classupdates-dropdown-section support idupdates-dropdown-support styledisplay:none roletabpanel aria-labelledbyupdates-dropdown-support-btn> Visit our a target_blank hrefhttps://punktum.dk/en/contact-customer-service>support site/a>. /div> div classupdates-dropdown-section atom idupdates-dropdown-atom roletabpanel aria-labelledbyupdates-dropdown-atom-btn> Get the a hrefhttps://status.punktum.dk/history.atom target_blank>Atom Feed/a> or a hrefhttps://status.punktum.dk/history.rss target_blank>RSS Feed/a>. /div> /div> /div> /div>script> $(function () { const phoneNumberInput $(#phone-number); const errorDiv $(#sms-atl-error) if(errorDiv.length){ function checkSelectedCountry() { const selectedCountry $(#phone-country).val(); const isOtpEnabled $(#phone-number-country-code).attr(data-otp-enabled) true; const form document.getElementById(subscribe-form-sms); form.action /subscriptions/new-sms; const isOtpFlow document.getElementById(otp_verify_flow); document.getElementById(otp-container).style.display none; if(false && selectedCountry sg) { // Replace SG with the actual value representing Singapore in your select tag phoneNumberInput.prop(disabled, true); errorDiv.html(`Due to new Singapore government regulations, were currently not supporting text subscriptions in Singapore.a hrefhttps://community.atlassian.com/t5/Statuspage-articles/Attention-SMS-notifications-will-be-disabled-on-August-1st-2023/ba-p/2424398 target_blank> Learn more./a> br> Select another method to subscribe.`); } else { phoneNumberInput.prop(readonly, false); errorDiv.html(); if(false){ if(isOtpEnabled){ document.getElementById(subscribe-btn-sms).value Send OTP; } else { isOtpFlow.value false; document.getElementById(subscribe-btn-sms).value Subscribe via Text Message; } } } } $(#phone-country).on(change, checkSelectedCountry); checkSelectedCountry(); } }); document.addEventListener(DOMContentLoaded, function() { const dropdown document.querySelector(#phone-number-country-code .phone-country); if (dropdown){ const wrapperDiv document.getElementById(phone-number-country-code); const selectedOption dropdown.optionsdropdown.selectedIndex; const otpEnabled selectedOption.getAttribute(data-otp-enabled); wrapperDiv.setAttribute(data-otp-enabled, otpEnabled); dropdown.addEventListener(change, function() { const selectedOption dropdown.optionsdropdown.selectedIndex; const otpEnabled selectedOption.getAttribute(data-otp-enabled); wrapperDiv.setAttribute(data-otp-enabled, otpEnabled); }); } }); var countdownTimer; var resendBtn document.getElementById(resend); var timer document.getElementById(timer); var form document.getElementById(subscribe-form-sms); var RESEND_TIMER 30; $(function() { $(#subscribe-form-sms).on(ajax:success, function(e, data, status, xhr){ const form this; const action form.getAttribute(action); if (data.type success && data.otp_flow true) { document.getElementById(subscriber_code).value data.subscriber_code document.getElementById(otp-container).style.display block; $(#phone-number).prop(readonly, true); var display document.getElementById(countdown); disableResend(); startTimer(RESEND_TIMER, display) document.getElementById(subscribe-btn-sms).value Verify OTP and Subscribe; document.getElementById(otp_verify_flow).value true; form.action /subscriptions/verify-otp; } else if (data.type success && action.includes(verify)){ document.getElementById(otp-container).style.display none; $(#phone-number).val().prop(readonly, false); $(#otp).val(); document.getElementById(subscribe-btn-sms).value Send OTP; document.getElementById(otp_verify_flow).value false; form.action /subscriptions/new-sms; SP.currentPage.updatesDropdown.hide(); } }); $(#btn-subcriber-change-number).on(click, () > { document.getElementById(otp-container).style.display none; $(#phone-number).prop(readonly, false); document.getElementById(subscribe-btn-sms).value Send OTP; form.action /subscriptions/new-sms; return false }) $(#resend-otp-btn).on(click, function(e) { e.preventDefault(); let phoneNumber $(#phone-number).val(); let countryCode $(.phone-country).val(); $.ajax({ type: POST, url: /subscriptions/new-sms, data: { phone_number: phoneNumber, phone_country: countryCode, type: resend }, }).done(function(data) { var messageOptions (data.type ! undefined && data.type ! null) ? { cssClass: data.type } : {}; HRB.utils.notify(data.text, messageOptions); var display document.getElementById(countdown); disableResend(); timer.style.display none if (data.type success) { startTimer(RESEND_TIMER, display); } }) }); }) function startTimer(duration, display){ var timer duration, seconds; clearInterval(countdownTimer); countdownTimer setInterval(function () { seconds parseInt(timer % 60, 10); display.textContent seconds; if(--timer 0){ enableResend(); clearInterval(countdownTimer); } }, 1000); disableResend(); } function enableResend(){ resendBtn.style.display block; timer.style.display none } function disableResend(){ resendBtn.style.display none; timer.style.display block } $(function() { $(#subscribe-form-email).on(submit, function() { var tokenField document.getElementById(email-otp-token-field); let page_code 8s7q16bbmq6n let key keyForEmailOtpToken($(#email).val(), page_code); tokenField.value localStorage.getItem(key); }); }); var emailOtpCountdownTimer; var emailOtpResendBtn document.getElementById(resend-email-otp); var emailOtpTimer document.getElementById(email-otp-timer); var emailOtpForm document.getElementById(subscribe-form-email); var EMAIL_OTP_RESEND_TIMER 600; $(function() { $(#subscribe-form-email).on(ajax:success, function(e, data, status, xhr){ const form this; const action form.getAttribute(action); if (data.type success && data.email_otp_verify_flow true) { document.getElementById(email-otp-container).style.display block; var display document.getElementById(email-otp-countdown); display.textContent EMAIL_OTP_RESEND_TIMER; disableEmailOtpResend(); startEmailOtpTimer(EMAIL_OTP_RESEND_TIMER, display) document.getElementById(subscribe-btn-email).value Verify OTP and Subscribe; document.getElementById(email_otp_verify_flow).value true; form.action /subscriptions/verify-email-otp; } else if (data.type success && action.includes(verify)){ let email $(#email) let page_code 8s7q16bbmq6n let key keyForEmailOtpToken(email.val(), page_code); localStorage.setItem(key, data.email_otp_auth_token); document.getElementById(email-otp-container).style.display none; email.val().prop(readonly, false); $(#email-otp).val(); document.getElementById(subscribe-btn-email).value Send OTP; document.getElementById(email_otp_verify_flow).value false; form.action /subscriptions/new-email; SP.currentPage.updatesDropdown.hide(); } }); $(#resend-email-otp-btn).on(click, function(e) { e.preventDefault(); let email $(#email).val(); $.ajax({ type: POST, url: /subscriptions/new-email, data: { email: email }, }).done(function(data) { var messageOptions (data.type ! undefined && data.type ! null) ? { cssClass: data.type } : {}; HRB.utils.notify(data.text, messageOptions); if (data.type success) { var display document.getElementById(email-otp-countdown); display.textContent EMAIL_OTP_RESEND_TIMER; disableEmailOtpResend(); emailOtpTimer.style.display none startEmailOtpTimer(EMAIL_OTP_RESEND_TIMER, display); } }) }); }) function startEmailOtpTimer(duration, display){ var timer duration, seconds; clearInterval(emailOtpCountdownTimer); emailOtpCountdownTimer setInterval(function () { seconds parseInt(timer, 10); display.textContent seconds; if(--timer 0){ enableEmailOtpResend(); clearInterval(emailOtpCountdownTimer); } }, 1000); disableEmailOtpResend(); } function enableEmailOtpResend(){ emailOtpResendBtn.style.display block; emailOtpTimer.style.display none } function disableEmailOtpResend(){ emailOtpResendBtn.style.display none; emailOtpTimer.style.display block } function keyForEmailOtpToken(email, pageCode) { return email + | + pageCode+ |SUBSCRIBE_VIA_EMAIL; }/script> div classclearfix>/div> /div>/div> !-- this is outside of the .container so that the cover photo can go full width on mobile --> div classcontainer> div classpage-status status-none> h2 classstatus font-large> All Systems Operational /h2> span classlast-updated-stamp font-small>/span> /div> div classtext-section> h2 classfont-largest> a idabout-this-site href#about-this-site classno-link>About This Site/a> /h2> p classcolor-secondary font-regular> Overview of operational status, incidents and planned maintenance on .dk domain name service and related administrative services. /p> /div> div classcomponents-section font-regular> div classcomponents-container one-column> div classcomponent-container border-color is-group > div data-component-id0hq7j7nxm1y9 classcomponent-inner-container status-green data-component-statusoperational data-js-hookcomponent-group-opener> span classname> span classfa group-parent-indicator color-secondary font-small fa-plus-square-o rolebutton aria-expandedfalse aria-labelToggle DNS (.dk) tabindex0>/span> span> DNS (.dk) /span> /span> span classcomponent-status tool titleGroups take on the status of their most degraded child component or service. Click to see the status of the individual children. > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> !-- children components --> div classchild-components-container > div data-component-idgfxgqwq9b1r6 classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> a.nic.dk /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> div data-component-idrzgrkjqzdflr classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> b.nic.dk /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> div data-component-idh68mcq3rl3sr classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> c.nic.dk /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> div data-component-id373x5x52p5dn classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> d.nic.dk /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> div data-component-idfdxfdbph60rp classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> l.nic.dk /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> div data-component-idl34k7m38yq8d classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> p.nic.dk /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> div data-component-id8yld3617kg61 classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> s.nic.dk /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div>/div> div classcomponent-container border-color> div data-component-idr6jll902lynl classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> Website (www) /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div> div classcomponent-container border-color> div data-component-idvdnfyhwqghx8 classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> Self-Service Portal /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div> div classcomponent-container border-color> div data-component-idzrk7ybd2f8c3 classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> Registrar Portal /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div> div classcomponent-container border-color> div data-component-idvrh1k66pqjlc classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> Whois (web) /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div> div classcomponent-container border-color> div data-component-idxp3bfctvnhzv classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> Whois (text) /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div> div classcomponent-container border-color> div data-component-id8kfcbsbqsc0c classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> Whois API /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div> div classcomponent-container border-color> div data-component-idbpnlwx3qghbq classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> EPP (Extensible Provisioning Protocol) /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div> div classcomponent-container border-color> div data-component-idty08fqfmy1j2 classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> DAS (Domain Availability Service) /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div> div classcomponent-container border-color> div data-component-idzz9zbmwc3vn4 classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> Administrative services /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div> div classcomponent-container border-color> div data-component-id0bxmyxl27r3s classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> Zonemaster /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div> div classcomponent-container border-color> div data-component-idmn9x7llcvs5r classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> Stats /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div> div classcomponent-container border-color> div data-component-id89vtrjx11r8b classcomponent-inner-container status-green data-component-statusoperational data-js-hook> span classname> Sandbox environment /span> span classcomponent-status title > Operational /span> button typebutton classtool icon-indicator fa fa-check status-icon-button aria-labelOperational data-js-hooktooltip data-original-titleOperational>/button>/div> /div> /div> div classcomponent-statuses-legend font-small> div classlegend-item status-green> span classicon-indicator fa fa-check>/span> Operational /div> div classlegend-item status-yellow> span classicon-indicator fa fa-minus-square>/span> Degraded Performance /div> div classlegend-item status-orange> span classicon-indicator fa fa-exclamation-triangle>/span> Partial Outage /div> div classbreaker>/div> div classlegend-item status-red> span classicon-indicator fa fa-times>/span> Major Outage /div> div classlegend-item status-blue> span classicon-indicator fa fa-wrench>/span> Maintenance /div>/div> /div> div classcustom-metrics-container idcustom-metrics-container> div classtimeframes-container> a classfont-largest no-link idsystem-metrics href#system-metrics>System Metrics/a> a href# classtimeframe color-secondary font-regular border-color data-js-hookdata-time-period-toggle data-time-periodmonth>Month/a> a href# classtimeframe color-secondary font-regular border-color data-js-hookdata-time-period-toggle data-time-periodweek>span classtranslation_missing titletranslation missing: en.week>Week/span>/a> a href# classtimeframe active color-secondary font-regular border-color data-js-hookdata-time-period-toggle data-time-periodday>Day/a> /div> div classmetrics-container> div classmetric border-color> div classmetric-meta font-large> div classmetric-name color-primary> b.nic.dk (response time) /div> div data-js-hookmetrics-display-current-qh87xrmq9kw2 classmetric-average color-secondary>span classtranslation_missing titletranslation missing: en.fetching>Fetching/span>/div> /div> div classmetrics-display-graph> div classgraph-container idmetrics-display-graph-container-qh87xrmq9kw2 data-js-hook metrics-display-graph-container-qh87xrmq9kw2>/div> /div> /div> div classmetric border-color> div classmetric-meta font-large> div classmetric-name color-primary> c.nic.dk (response time) /div> div data-js-hookmetrics-display-current-qm1whryd7232 classmetric-average color-secondary>span classtranslation_missing titletranslation missing: en.fetching>Fetching/span>/div> /div> div classmetrics-display-graph> div classgraph-container idmetrics-display-graph-container-qm1whryd7232 data-js-hook metrics-display-graph-container-qm1whryd7232>/div> /div> /div> div classmetric border-color> div classmetric-meta font-large> div classmetric-name color-primary> h.nic.dk (response time) /div> div data-js-hookmetrics-display-current-ghdxmd2w9r6d classmetric-average color-secondary>span classtranslation_missing titletranslation missing: en.fetching>Fetching/span>/div> /div> div classmetrics-display-graph> div classgraph-container idmetrics-display-graph-container-ghdxmd2w9r6d data-js-hook metrics-display-graph-container-ghdxmd2w9r6d>/div> /div> /div> div classmetric border-color> div classmetric-meta font-large> div classmetric-name color-primary> l.nic.dk (response time) /div> div data-js-hookmetrics-display-current-0ctm9gxy05k2 classmetric-average color-secondary>span classtranslation_missing titletranslation missing: en.fetching>Fetching/span>/div> /div> div classmetrics-display-graph> div classgraph-container idmetrics-display-graph-container-0ctm9gxy05k2 data-js-hook metrics-display-graph-container-0ctm9gxy05k2>/div> /div> /div> div classmetric border-color> div classmetric-meta font-large> div classmetric-name color-primary> s.nic.dk (response time) /div> div data-js-hookmetrics-display-current-crwzy8mj0w8w classmetric-average color-secondary>span classtranslation_missing titletranslation missing: en.fetching>Fetching/span>/div> /div> div classmetrics-display-graph> div classgraph-container idmetrics-display-graph-container-crwzy8mj0w8w data-js-hook metrics-display-graph-container-crwzy8mj0w8w>/div> /div> /div> div classmetric border-color> div classmetric-meta font-large> div classmetric-name color-primary> t.nic.dk (response time) /div> div data-js-hookmetrics-display-current-l5y5y15rr0mz classmetric-average color-secondary>span classtranslation_missing titletranslation missing: en.fetching>Fetching/span>/div> /div> div classmetrics-display-graph> div classgraph-container idmetrics-display-graph-container-l5y5y15rr0mz data-js-hook metrics-display-graph-container-l5y5y15rr0mz>/div> /div> /div> /div> /div> div classincidents-list format-expanded> h2 classfont-largest no-link idpast-incidents>Past Incidents/h2> div classstatus-day font-regular > div classdate border-color font-large>Jan var data-vardate>22/var>, var data-varyear>2026/var>/div> div classincident-container> div classincident-title impact-maintenance font-large> a classwhitespace-pre-wrap href/incidents/6p72rw7m5csq>Notification of Emergency Maintenance on Firewall Infrastructure – January 22nd 2026, 17:00–19:00 CET/a> /div> div classupdates-container> !-- postmortem --> !-- incident updates --> div classupdate font-regular completed> strong>Completed/strong> - span classwhitespace-pre-wrap>The scheduled maintenance has been completed./span> br> small> Jan var data-vardate>22/var>, var data-vartime>19:00/var> CET /small> /div> div classupdate font-regular in progress> strong>In progress/strong> - span classwhitespace-pre-wrap>Scheduled maintenance is currently in progress. We will provide updates as necessary./span> br> small> Jan var data-vardate>22/var>, var data-vartime>17:00/var> CET /small> /div> div classupdate font-regular scheduled> strong>Scheduled/strong> - span classwhitespace-pre-wrap>Dear Subscribersbr />br />We will be performing emergency maintenance on our firewall infrastructure tomorrow, January 22nd 2026, between 17:00 and 19:00 CET, in order to ensure continued stability and secure operation.br />br />During this maintenance window, all administrative services—including the self-service portal, WHOIS, and EPP—will be temporarily unavailable.br />br />The .dk name service will not be impacted by this maintenance.br />br />We apologize for any inconvenience this may cause and appreciate your understanding.br />br />Best regards,br />Punktum dk/span> br> small> Jan var data-vardate>21/var>, var data-vartime>08:57/var> CET /small> /div> /div>/div> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate>21/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate>20/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate>19/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate>18/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate>17/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate>16/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate>15/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> div classstatus-day font-regular > div classdate border-color font-large>Jan var data-vardate>14/var>, var data-varyear>2026/var>/div> div classincident-container> div classincident-title impact-maintenance font-large> a classwhitespace-pre-wrap href/incidents/rrhk0rk6v3yj>Punktum dk Introduces NIS2 Verification Features/a> /div> div classupdates-container> !-- postmortem --> !-- incident updates --> div classupdate font-regular completed> strong>Completed/strong> - span classwhitespace-pre-wrap>The scheduled maintenance has been completed./span> br> small> Jan var data-vardate>14/var>, var data-vartime>11:41/var> CET /small> /div> div classupdate font-regular verifying> strong>Verifying/strong> - span classwhitespace-pre-wrap>Verification is currently underway for the maintenance items./span> br> small> Jan var data-vardate>14/var>, var data-vartime>10:36/var> CET /small> /div> div classupdate font-regular in progress> strong>In progress/strong> - span classwhitespace-pre-wrap>Scheduled maintenance is currently in progress. We will provide updates as necessary./span> br> small> Jan var data-vardate>14/var>, var data-vartime>08:00/var> CET /small> /div> div classupdate font-regular scheduled> strong>Scheduled/strong> - span classwhitespace-pre-wrap>With the implementation of the EU NIS2 cybersecurity directive in Denmark, registrars are now required to verify domain registrants’ identities and contact information following agreed procedures. To support compliance, Punktum dk has developed a dedicated solution that allows registrars to either perform these verification checks themselves or delegate them to Punktum dk. The solution ensures all procedures and documentation meet NIS2 requirements, helping registrars maintain compliance while protecting registrant data.br />br />For full details, see the Punktum.dk article: Implementation of NIS2 a target_blank hrefhttps://punktum.dk/en/articles/implementation-of-nis2>https://punktum.dk/en/articles/implementation-of-nis2/a>br />br />The complete NIS2 verification solution be made available in our sandbox (Registrar Portal and EPP only) and production environments on Wednesday, January 14, 2026br />br />big>Affected Services/big>br />• EPP Version 5.2.0br />• Registrar Portal Version 4.4.0br />• Self-Service Portal Version 6.4.0br />br />big>Affected Environments/big>br />• a target_blank hrefhttps://epp.punktum.dk>https://epp.punktum.dk/a>br />• a target_blank hrefhttps://epp-sandbox.punktum.dk>https://epp-sandbox.punktum.dk/a>br />• a target_blank hrefhttps://rp.punktum.dk>https://rp.punktum.dk/a>br />• a target_blank hrefhttps://rp-sandbox.punktum.dk>https://rp-sandbox.punktum.dk/a>br />• a target_blank hrefhttps://selvbetjening.punktum.dk>https://selvbetjening.punktum.dk/a>br />• a target_blank hrefhttps://self-service.punktum.dk>https://self-service.punktum.dk/a>br />br />big>Expected Impact/big>br />• No downtime is expected during this maintenance window.br />br />big>Changes Included (EPP)/big>br />• DKHM 4.5 XML Schema Definition (XSD) incorporating new data elements for enhanced functionality. These changes include two new extensions:br /> - dkhm:sole_proprietorship A simple type containing information if the contact is a sole proprietorship company and therefore needs to have contact email hidden from public available WHOIS information.br /> - dkhm:contact_verification A complex type containing information regarding the contact verification process and status, including who is responsible for performing the verification process (registrar/registry), which type and verification process (identity/e-mail) and status of the verification process.br /> DKHM 4.4 is still supported with this release.br />• Additional poll messages primarily regarding verification flows delegated to Punktum dk.br />br />big>Changes Included (Registrar Portal)/big>br />• Selection of preferred verification model (registrar/registry) on the registrar accountbr />• Addition of verification elements in the web based contact and domain creation and display flowsbr />br />big>Changes Included (Self-Service Portal)/big>br />• Upgraded and modified flows for registry delegated contact verificationbr />br />big>Resources/big>br />• EPP Version 5.2.0 Release Notesbr /> - a target_blank hrefhttps://github.com/Punktum-dk/epp-service-specification/wiki#epp-version-520>https://github.com/Punktum-dk/epp-service-specification/wiki#epp-version-520/a>br />• EPP Poll Message Reference Guidebr /> - a target_blank hrefhttps://github.com/Punktum-dk/epp-service-specification/blob/master/Poll-Message-Reference-Guide.md>https://github.com/Punktum-dk/epp-service-specification/blob/master/Poll-Message-Reference-Guide.md/a>br />• EPP Service Specificationbr /> - a target_blank hrefhttps://github.com/Punktum-dk/epp-service-specification>https://github.com/Punktum-dk/epp-service-specification/a>br />• EPP XSD Filesbr /> - a target_blank hrefhttps://github.com/Punktum-dk/epp-xsd-files>https://github.com/Punktum-dk/epp-xsd-files/a> br />• Registrar Portal Version 4.4.0 Release Notesbr /> - a target_blank hrefhttps://github.com/Punktum-dk/rp-service-specification/wiki#registrar-portal-version-440>https://github.com/Punktum-dk/rp-service-specification/wiki#registrar-portal-version-440/a>br />• Registrar Portal Service Specificationbr /> - a target_blank hrefhttps://github.com/Punktum-dk/rp-service-specification>https://github.com/Punktum-dk/rp-service-specification/a>br />• Self-Service Portal Version 6.4.0 Release Notesbr /> - a target_blank hrefhttps://github.com/Punktum-dk/sb-service-specification/wiki#self-service-portal-version-640>https://github.com/Punktum-dk/sb-service-specification/wiki#self-service-portal-version-640/a>br />• Self-Service Portal Service Specificationbr /> - a target_blank hrefhttps://github.com/Punktum-dk/sb-service-specification>https://github.com/Punktum-dk/sb-service-specification/a>br />br />big>FAQ/big>br />• a target_blank hrefhttps://punktum.dk/en/faq>https://punktum.dk/en/faq/a>br />br />big>Support/big>br />Any questions or concerns regarding these updates can be submitted via our customer support form at a target_blank hrefhttps://punktum.dk/en/contact-customer-service>https://punktum.dk/en/contact-customer-service/a>/span> br> small> Jan var data-vardate>13/var>, var data-vartime>11:08/var> CET /small> /div> /div>/div> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate>13/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate>12/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate>11/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate>10/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate> 9/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> div classstatus-day font-regular no-incidents> div classdate border-color font-large>Jan var data-vardate> 8/var>, var data-varyear>2026/var>/div> p classcolor-secondary>No incidents reported./p> /div> /div> div classpage-footer border-color font-small> a href/history classhistory-footer-link>span stylefont-family:arial>←/span> Incident History/a> span classcolor-secondary powered-by>a classcolor-secondary target_blank relnoopener noreferrer nofollow hrefhttps://www.atlassian.com/software/statuspage?utm_campaignstatus.punktum.dk&utm_contentSP-notifications&utm_mediumpowered-by&utm_sourceinapp>Powered by Atlassian Statuspage/a>/span> /div> /div> /div> !-- custom metrics stuff --> script srchttps://dka575ofm4ao0.cloudfront.net/assets/status_manifest-acb69ae7e67a6c4167b2544bef9249ec03b50cdd6c9a198592162f175e04b891.js>/script> div idcpt-notification-container>/div> !-- all of the content_for stuff --> script srchttps://dka575ofm4ao0.cloudfront.net/assets/register_subscription_form-589b657fec607087fc5c740c568270907310bc4f6aaa20256e70f01b103025ca.js>/script> script typetext/javascript> $(function() { SP.currentPage.registerSubscriptionForm(email); SP.currentPage.registerSubscriptionForm(sms); SP.currentPage.registerSubscriptionForm(webhook); }); /script> script srchttps://dka575ofm4ao0.cloudfront.net/assets/status_common-a86dffb81955091741c3de8bded6ce66ae0c6d8f736b57b580f853d9f892727e.js>/script> script> SP.pollForChanges(/api/v2/status.json); /script> script> $(function() { $(.tool).tooltipster({ animationDuration: 100, contentAsHTML: true, delay: 100, theme: tooltipster-borderless, functionInit: function (instance, helper) { var $origin $(helper.origin), dataOptions $origin.attr(data-tooltip-config); if (dataOptions){ dataOptions JSON.parse(dataOptions); $.each(dataOptions, function(name, option){ instance.option(name, option); }); } } }); // clicks on first tab in subscribe popout since we wont know which is first // upon construction in the ruby code $(.updates-dropdown-nav > a).eq(0).click(); // twitter follow button needs some margin $(.twitter-follow-button).css(margin-right, 6px); }); $(function() { // open/close component groups HRB.utils.djshook(component-group-opener).on(click, function() { var groupParentIndicator $(this).find(.group-parent-indicator); groupParentIndicator.toggleClass(fa-plus-square-o).toggleClass(fa-minus-square-o).end().parent().toggleClass(open); toggleGroup(groupParentIndicator) }); }); $(function() { HRB.utils.djshook(component-group-opener).on(keydown, function(event) { if (event.key ! Enter && event.key ! ) { return; } event.preventDefault() var groupParentIndicator $(this).find(.group-parent-indicator); groupParentIndicator.toggleClass(fa-plus-square-o).toggleClass(fa-minus-square-o).end().parent().toggleClass(open); toggleGroup(groupParentIndicator) }); }); function toggleGroup(groupParentIndicator) { var isOpen groupParentIndicator.attr(aria-expanded) if (isOpen false) { groupParentIndicator.attr(aria-expanded, true); } else { groupParentIndicator.attr(aria-expanded, false); } } $(function() { $(document).on(ajax:complete, .modal.in, function(e) { // Close the active modal. $(.modal.in).modal(hide); }); }); /script> script srchttps://dka575ofm4ao0.cloudfront.net/assets/vendor/highstock.min-a7181c8f093438143dae37524f8463a97e2503789bc322732d3141f2c00c1c1a.js>/script> script> //!CDATA String.prototype.commafy function () { return this.replace(/(^|^\w.)(\d{4,})/g, function($0, $1, $2) { return $1 + $2.replace(/\d(?(?:\d\d\d)+(?!\d))/g, $&,); }); } Number.prototype.commafy function () { return String(this).commafy(); } $(function() { SP.currentPage.numberToDecimalPlaces function(num, dec) { if (dec 0) { return Math.round(num).commafy(); } newnum num.toFixed(dec) var finalValue; // this gets rid of the 100.000% thing if (num parseInt(newnum)) finalValue Math.round(num); else finalValue newnum; return finalValue.commafy(); } SP.currentPage.getDataForTimePeriod function(period) { $.ajax({ type: GET, // this line must be end up with //status.* type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: //status.punktum.dk/metrics-display/qh87xrmq9kw2/_.json.replace(_, period) }).done(function(metricsDisplay, textStatus, xhr) { var summary metricsDisplay.summary , $metricSummaryLabel HRB.utils.djshook(metrics-display-current-qh87xrmq9kw2) , $graphContainer HRB.utils.djshook(metrics-display-graph-container-qh87xrmq9kw2); var errorMsg null; if(summary unavailable) { errorMsg We\re having issues retrieving data for strong>b.nic.dk (response time)/strong>./div>; } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable false; for(var h 0; h metricsDisplay.metrics.length; h++) { if(metricsDisplay.metricsh.data.length > 0) { hasDataRollupsAvailable true; break; } } if(!hasDataRollupsAvailable) { errorMsg Oops! No data has been indexed for strong>b.nic.dk (response time)/strong> for this time period yet.; } } else { errorMsg Failed to load. strong>b.nic.dk (response time)/strong>; } if(errorMsg ! null) { $metricSummaryLabel.text(--); // display -- instead of number $graphContainer.html(div classsmall styletext-align:center;> + errorMsg + /div>); // removed .parent().find(.metric-meta).remove() so name still shows $graphContainer.removeAttr(style); return; } $graphContainer.show(); $graphContainer.attr(style, height: 120px); // set style after error message removed it // proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summarylast, 0 ) + ms); var metricDataPoints {} , intervalMsec metricsDisplay.period.interval * 1000; var startingBucketMsec parseInt((new Date()).getTime() / intervalMsec) * intervalMsec; for(var h 0; h metricsDisplay.metrics.length; h++) { metricDataPointsmetricsDisplay.metricsh.metric.id var data metricsDisplay.metricsh.data , currentBucketMsec startingBucketMsec; for(var i metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse null; for(var j data.length - 1; j > 0; j--) { var currentTimestampMsec dataj.timestamp * 1000; if(currentTimestampMsec currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse dataj.value; // console.log(Using ts: + currentTimestampMsec + with value: + valueToUse + for bucket: + currentBucketMsec); break; } } // local time var offset -1 * (new Date()).getTimezoneOffset() * 60 * 1000; metricDataPointsmetricsDisplay.metricsh.metric.id.push(currentBucketMsec + offset, valueToUse) currentBucketMsec - intervalMsec; } metricDataPointsmetricsDisplay.metricsh.metric.id.reverse(); } // set Global options Highcharts.setOptions({ lang: { thousandsSep: , } }); $(#metrics-display-graph-container-qh87xrmq9kw2).highcharts(StockChart, { plotOptions : { series : { animation : false, color : #559C9E, connectNulls: false }, }, chart : { backgroundColor: #FFFFFF }, title : { text: , style: { display: none, } }, credits : { enabled : false }, exporting : { enabled : false }, rangeSelector : { enabled : false }, scrollbar : { enabled : false }, navigator : { enabled : false }, xAxis: { gridLineColor : rgba(233,232,233,.8), labels: { style : { color: #A9A8A9 } }, lineColor: #E9E8E9, }, yAxis: { gridLineColor : rgba(233,232,233,.5), labels: { align: left, x: 5, y: 3, style : { color: #A9A8A9 }, enabled : true }, showLastLabel: true, min: 0.0, startOnTick: false, tickPixelInterval: 40, }, series : { name : b.nic.dk (response time), data : metricDataPointsc90fw99r2dn3, tooltip: { valueSuffix: ms }, enableMouseTracking : ($(window).outerWidth() > 480) && true } , tooltip: { borderWidth: 0, enabled: ($(window).outerWidth() > 480) && true, headerFormat: span stylefont-size: 10px>{point.key} /span>, hideDelay: 300, pointFormat: span stylecolor:{point.color}>●/span> b>{point.y}/b>br/>, positioner: function() { return {x: 0, y: 0 }; }, shadow: false, shape: square, split: false } }); }); $.ajax({ type: GET, // this line must be end up with //status.* type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: //status.punktum.dk/metrics-display/qm1whryd7232/_.json.replace(_, period) }).done(function(metricsDisplay, textStatus, xhr) { var summary metricsDisplay.summary , $metricSummaryLabel HRB.utils.djshook(metrics-display-current-qm1whryd7232) , $graphContainer HRB.utils.djshook(metrics-display-graph-container-qm1whryd7232); var errorMsg null; if(summary unavailable) { errorMsg We\re having issues retrieving data for strong>c.nic.dk (response time)/strong>./div>; } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable false; for(var h 0; h metricsDisplay.metrics.length; h++) { if(metricsDisplay.metricsh.data.length > 0) { hasDataRollupsAvailable true; break; } } if(!hasDataRollupsAvailable) { errorMsg Oops! No data has been indexed for strong>c.nic.dk (response time)/strong> for this time period yet.; } } else { errorMsg Failed to load. strong>c.nic.dk (response time)/strong>; } if(errorMsg ! null) { $metricSummaryLabel.text(--); // display -- instead of number $graphContainer.html(div classsmall styletext-align:center;> + errorMsg + /div>); // removed .parent().find(.metric-meta).remove() so name still shows $graphContainer.removeAttr(style); return; } $graphContainer.show(); $graphContainer.attr(style, height: 120px); // set style after error message removed it // proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summarylast, 0 ) + ms); var metricDataPoints {} , intervalMsec metricsDisplay.period.interval * 1000; var startingBucketMsec parseInt((new Date()).getTime() / intervalMsec) * intervalMsec; for(var h 0; h metricsDisplay.metrics.length; h++) { metricDataPointsmetricsDisplay.metricsh.metric.id var data metricsDisplay.metricsh.data , currentBucketMsec startingBucketMsec; for(var i metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse null; for(var j data.length - 1; j > 0; j--) { var currentTimestampMsec dataj.timestamp * 1000; if(currentTimestampMsec currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse dataj.value; // console.log(Using ts: + currentTimestampMsec + with value: + valueToUse + for bucket: + currentBucketMsec); break; } } // local time var offset -1 * (new Date()).getTimezoneOffset() * 60 * 1000; metricDataPointsmetricsDisplay.metricsh.metric.id.push(currentBucketMsec + offset, valueToUse) currentBucketMsec - intervalMsec; } metricDataPointsmetricsDisplay.metricsh.metric.id.reverse(); } // set Global options Highcharts.setOptions({ lang: { thousandsSep: , } }); $(#metrics-display-graph-container-qm1whryd7232).highcharts(StockChart, { plotOptions : { series : { animation : false, color : #559C9E, connectNulls: false }, }, chart : { backgroundColor: #FFFFFF }, title : { text: , style: { display: none, } }, credits : { enabled : false }, exporting : { enabled : false }, rangeSelector : { enabled : false }, scrollbar : { enabled : false }, navigator : { enabled : false }, xAxis: { gridLineColor : rgba(233,232,233,.8), labels: { style : { color: #A9A8A9 } }, lineColor: #E9E8E9, }, yAxis: { gridLineColor : rgba(233,232,233,.5), labels: { align: left, x: 5, y: 3, style : { color: #A9A8A9 }, enabled : true }, showLastLabel: true, min: 0.0, startOnTick: false, tickPixelInterval: 40, }, series : { name : c.nic.dk (response time), data : metricDataPointsvxcm63sx7w4j, tooltip: { valueSuffix: ms }, enableMouseTracking : ($(window).outerWidth() > 480) && true } , tooltip: { borderWidth: 0, enabled: ($(window).outerWidth() > 480) && true, headerFormat: span stylefont-size: 10px>{point.key} /span>, hideDelay: 300, pointFormat: span stylecolor:{point.color}>●/span> b>{point.y}/b>br/>, positioner: function() { return {x: 0, y: 0 }; }, shadow: false, shape: square, split: false } }); }); $.ajax({ type: GET, // this line must be end up with //status.* type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: //status.punktum.dk/metrics-display/ghdxmd2w9r6d/_.json.replace(_, period) }).done(function(metricsDisplay, textStatus, xhr) { var summary metricsDisplay.summary , $metricSummaryLabel HRB.utils.djshook(metrics-display-current-ghdxmd2w9r6d) , $graphContainer HRB.utils.djshook(metrics-display-graph-container-ghdxmd2w9r6d); var errorMsg null; if(summary unavailable) { errorMsg We\re having issues retrieving data for strong>h.nic.dk (response time)/strong>./div>; } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable false; for(var h 0; h metricsDisplay.metrics.length; h++) { if(metricsDisplay.metricsh.data.length > 0) { hasDataRollupsAvailable true; break; } } if(!hasDataRollupsAvailable) { errorMsg Oops! No data has been indexed for strong>h.nic.dk (response time)/strong> for this time period yet.; } } else { errorMsg Failed to load. strong>h.nic.dk (response time)/strong>; } if(errorMsg ! null) { $metricSummaryLabel.text(--); // display -- instead of number $graphContainer.html(div classsmall styletext-align:center;> + errorMsg + /div>); // removed .parent().find(.metric-meta).remove() so name still shows $graphContainer.removeAttr(style); return; } $graphContainer.show(); $graphContainer.attr(style, height: 120px); // set style after error message removed it // proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summarymean, 0 ) + ms); var metricDataPoints {} , intervalMsec metricsDisplay.period.interval * 1000; var startingBucketMsec parseInt((new Date()).getTime() / intervalMsec) * intervalMsec; for(var h 0; h metricsDisplay.metrics.length; h++) { metricDataPointsmetricsDisplay.metricsh.metric.id var data metricsDisplay.metricsh.data , currentBucketMsec startingBucketMsec; for(var i metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse null; for(var j data.length - 1; j > 0; j--) { var currentTimestampMsec dataj.timestamp * 1000; if(currentTimestampMsec currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse dataj.value; // console.log(Using ts: + currentTimestampMsec + with value: + valueToUse + for bucket: + currentBucketMsec); break; } } // local time var offset -1 * (new Date()).getTimezoneOffset() * 60 * 1000; metricDataPointsmetricsDisplay.metricsh.metric.id.push(currentBucketMsec + offset, valueToUse) currentBucketMsec - intervalMsec; } metricDataPointsmetricsDisplay.metricsh.metric.id.reverse(); } // set Global options Highcharts.setOptions({ lang: { thousandsSep: , } }); $(#metrics-display-graph-container-ghdxmd2w9r6d).highcharts(StockChart, { plotOptions : { series : { animation : false, color : #559C9E, connectNulls: false }, }, chart : { backgroundColor: #FFFFFF }, title : { text: , style: { display: none, } }, credits : { enabled : false }, exporting : { enabled : false }, rangeSelector : { enabled : false }, scrollbar : { enabled : false }, navigator : { enabled : false }, xAxis: { gridLineColor : rgba(233,232,233,.8), labels: { style : { color: #A9A8A9 } }, lineColor: #E9E8E9, }, yAxis: { gridLineColor : rgba(233,232,233,.5), labels: { align: left, x: 5, y: 3, style : { color: #A9A8A9 }, enabled : true }, showLastLabel: true, min: 0.0, startOnTick: false, tickPixelInterval: 40, }, series : { name : h.nic.dk (response time), data : metricDataPointsvxj2s2ww959j, tooltip: { valueSuffix: ms }, enableMouseTracking : ($(window).outerWidth() > 480) && true } , tooltip: { borderWidth: 0, enabled: ($(window).outerWidth() > 480) && true, headerFormat: span stylefont-size: 10px>{point.key} /span>, hideDelay: 300, pointFormat: span stylecolor:{point.color}>●/span> b>{point.y}/b>br/>, positioner: function() { return {x: 0, y: 0 }; }, shadow: false, shape: square, split: false } }); }); $.ajax({ type: GET, // this line must be end up with //status.* type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: //status.punktum.dk/metrics-display/0ctm9gxy05k2/_.json.replace(_, period) }).done(function(metricsDisplay, textStatus, xhr) { var summary metricsDisplay.summary , $metricSummaryLabel HRB.utils.djshook(metrics-display-current-0ctm9gxy05k2) , $graphContainer HRB.utils.djshook(metrics-display-graph-container-0ctm9gxy05k2); var errorMsg null; if(summary unavailable) { errorMsg We\re having issues retrieving data for strong>l.nic.dk (response time)/strong>./div>; } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable false; for(var h 0; h metricsDisplay.metrics.length; h++) { if(metricsDisplay.metricsh.data.length > 0) { hasDataRollupsAvailable true; break; } } if(!hasDataRollupsAvailable) { errorMsg Oops! No data has been indexed for strong>l.nic.dk (response time)/strong> for this time period yet.; } } else { errorMsg Failed to load. strong>l.nic.dk (response time)/strong>; } if(errorMsg ! null) { $metricSummaryLabel.text(--); // display -- instead of number $graphContainer.html(div classsmall styletext-align:center;> + errorMsg + /div>); // removed .parent().find(.metric-meta).remove() so name still shows $graphContainer.removeAttr(style); return; } $graphContainer.show(); $graphContainer.attr(style, height: 120px); // set style after error message removed it // proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summarylast, 0 ) + ms); var metricDataPoints {} , intervalMsec metricsDisplay.period.interval * 1000; var startingBucketMsec parseInt((new Date()).getTime() / intervalMsec) * intervalMsec; for(var h 0; h metricsDisplay.metrics.length; h++) { metricDataPointsmetricsDisplay.metricsh.metric.id var data metricsDisplay.metricsh.data , currentBucketMsec startingBucketMsec; for(var i metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse null; for(var j data.length - 1; j > 0; j--) { var currentTimestampMsec dataj.timestamp * 1000; if(currentTimestampMsec currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse dataj.value; // console.log(Using ts: + currentTimestampMsec + with value: + valueToUse + for bucket: + currentBucketMsec); break; } } // local time var offset -1 * (new Date()).getTimezoneOffset() * 60 * 1000; metricDataPointsmetricsDisplay.metricsh.metric.id.push(currentBucketMsec + offset, valueToUse) currentBucketMsec - intervalMsec; } metricDataPointsmetricsDisplay.metricsh.metric.id.reverse(); } // set Global options Highcharts.setOptions({ lang: { thousandsSep: , } }); $(#metrics-display-graph-container-0ctm9gxy05k2).highcharts(StockChart, { plotOptions : { series : { animation : false, color : #559C9E, connectNulls: false }, }, chart : { backgroundColor: #FFFFFF }, title : { text: , style: { display: none, } }, credits : { enabled : false }, exporting : { enabled : false }, rangeSelector : { enabled : false }, scrollbar : { enabled : false }, navigator : { enabled : false }, xAxis: { gridLineColor : rgba(233,232,233,.8), labels: { style : { color: #A9A8A9 } }, lineColor: #E9E8E9, }, yAxis: { gridLineColor : rgba(233,232,233,.5), labels: { align: left, x: 5, y: 3, style : { color: #A9A8A9 }, enabled : true }, showLastLabel: true, min: 0.0, startOnTick: false, tickPixelInterval: 40, }, series : { name : l.nic.dk (response time), data : metricDataPoints5cq89zlj5q08, tooltip: { valueSuffix: ms }, enableMouseTracking : ($(window).outerWidth() > 480) && true } , tooltip: { borderWidth: 0, enabled: ($(window).outerWidth() > 480) && true, headerFormat: span stylefont-size: 10px>{point.key} /span>, hideDelay: 300, pointFormat: span stylecolor:{point.color}>●/span> b>{point.y}/b>br/>, positioner: function() { return {x: 0, y: 0 }; }, shadow: false, shape: square, split: false } }); }); $.ajax({ type: GET, // this line must be end up with //status.* type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: //status.punktum.dk/metrics-display/crwzy8mj0w8w/_.json.replace(_, period) }).done(function(metricsDisplay, textStatus, xhr) { var summary metricsDisplay.summary , $metricSummaryLabel HRB.utils.djshook(metrics-display-current-crwzy8mj0w8w) , $graphContainer HRB.utils.djshook(metrics-display-graph-container-crwzy8mj0w8w); var errorMsg null; if(summary unavailable) { errorMsg We\re having issues retrieving data for strong>s.nic.dk (response time)/strong>./div>; } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable false; for(var h 0; h metricsDisplay.metrics.length; h++) { if(metricsDisplay.metricsh.data.length > 0) { hasDataRollupsAvailable true; break; } } if(!hasDataRollupsAvailable) { errorMsg Oops! No data has been indexed for strong>s.nic.dk (response time)/strong> for this time period yet.; } } else { errorMsg Failed to load. strong>s.nic.dk (response time)/strong>; } if(errorMsg ! null) { $metricSummaryLabel.text(--); // display -- instead of number $graphContainer.html(div classsmall styletext-align:center;> + errorMsg + /div>); // removed .parent().find(.metric-meta).remove() so name still shows $graphContainer.removeAttr(style); return; } $graphContainer.show(); $graphContainer.attr(style, height: 120px); // set style after error message removed it // proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summarylast, 0 ) + ms); var metricDataPoints {} , intervalMsec metricsDisplay.period.interval * 1000; var startingBucketMsec parseInt((new Date()).getTime() / intervalMsec) * intervalMsec; for(var h 0; h metricsDisplay.metrics.length; h++) { metricDataPointsmetricsDisplay.metricsh.metric.id var data metricsDisplay.metricsh.data , currentBucketMsec startingBucketMsec; for(var i metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse null; for(var j data.length - 1; j > 0; j--) { var currentTimestampMsec dataj.timestamp * 1000; if(currentTimestampMsec currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse dataj.value; // console.log(Using ts: + currentTimestampMsec + with value: + valueToUse + for bucket: + currentBucketMsec); break; } } // local time var offset -1 * (new Date()).getTimezoneOffset() * 60 * 1000; metricDataPointsmetricsDisplay.metricsh.metric.id.push(currentBucketMsec + offset, valueToUse) currentBucketMsec - intervalMsec; } metricDataPointsmetricsDisplay.metricsh.metric.id.reverse(); } // set Global options Highcharts.setOptions({ lang: { thousandsSep: , } }); $(#metrics-display-graph-container-crwzy8mj0w8w).highcharts(StockChart, { plotOptions : { series : { animation : false, color : #559C9E, connectNulls: false }, }, chart : { backgroundColor: #FFFFFF }, title : { text: , style: { display: none, } }, credits : { enabled : false }, exporting : { enabled : false }, rangeSelector : { enabled : false }, scrollbar : { enabled : false }, navigator : { enabled : false }, xAxis: { gridLineColor : rgba(233,232,233,.8), labels: { style : { color: #A9A8A9 } }, lineColor: #E9E8E9, }, yAxis: { gridLineColor : rgba(233,232,233,.5), labels: { align: left, x: 5, y: 3, style : { color: #A9A8A9 }, enabled : true }, showLastLabel: true, min: 0.0, startOnTick: false, tickPixelInterval: 40, }, series : { name : s.nic.dk (response time), data : metricDataPointsnh44l7lgw4wf, tooltip: { valueSuffix: ms }, enableMouseTracking : ($(window).outerWidth() > 480) && true } , tooltip: { borderWidth: 0, enabled: ($(window).outerWidth() > 480) && true, headerFormat: span stylefont-size: 10px>{point.key} /span>, hideDelay: 300, pointFormat: span stylecolor:{point.color}>●/span> b>{point.y}/b>br/>, positioner: function() { return {x: 0, y: 0 }; }, shadow: false, shape: square, split: false } }); }); $.ajax({ type: GET, // this line must be end up with //status.* type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: //status.punktum.dk/metrics-display/l5y5y15rr0mz/_.json.replace(_, period) }).done(function(metricsDisplay, textStatus, xhr) { var summary metricsDisplay.summary , $metricSummaryLabel HRB.utils.djshook(metrics-display-current-l5y5y15rr0mz) , $graphContainer HRB.utils.djshook(metrics-display-graph-container-l5y5y15rr0mz); var errorMsg null; if(summary unavailable) { errorMsg We\re having issues retrieving data for strong>t.nic.dk (response time)/strong>./div>; } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable false; for(var h 0; h metricsDisplay.metrics.length; h++) { if(metricsDisplay.metricsh.data.length > 0) { hasDataRollupsAvailable true; break; } } if(!hasDataRollupsAvailable) { errorMsg Oops! No data has been indexed for strong>t.nic.dk (response time)/strong> for this time period yet.; } } else { errorMsg Failed to load. strong>t.nic.dk (response time)/strong>; } if(errorMsg ! null) { $metricSummaryLabel.text(--); // display -- instead of number $graphContainer.html(div classsmall styletext-align:center;> + errorMsg + /div>); // removed .parent().find(.metric-meta).remove() so name still shows $graphContainer.removeAttr(style); return; } $graphContainer.show(); $graphContainer.attr(style, height: 120px); // set style after error message removed it // proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summarymean, 0 ) + ms); var metricDataPoints {} , intervalMsec metricsDisplay.period.interval * 1000; var startingBucketMsec parseInt((new Date()).getTime() / intervalMsec) * intervalMsec; for(var h 0; h metricsDisplay.metrics.length; h++) { metricDataPointsmetricsDisplay.metricsh.metric.id var data metricsDisplay.metricsh.data , currentBucketMsec startingBucketMsec; for(var i metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse null; for(var j data.length - 1; j > 0; j--) { var currentTimestampMsec dataj.timestamp * 1000; if(currentTimestampMsec currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse dataj.value; // console.log(Using ts: + currentTimestampMsec + with value: + valueToUse + for bucket: + currentBucketMsec); break; } } // local time var offset -1 * (new Date()).getTimezoneOffset() * 60 * 1000; metricDataPointsmetricsDisplay.metricsh.metric.id.push(currentBucketMsec + offset, valueToUse) currentBucketMsec - intervalMsec; } metricDataPointsmetricsDisplay.metricsh.metric.id.reverse(); } // set Global options Highcharts.setOptions({ lang: { thousandsSep: , } }); $(#metrics-display-graph-container-l5y5y15rr0mz).highcharts(StockChart, { plotOptions : { series : { animation : false, color : #559C9E, connectNulls: false }, }, chart : { backgroundColor: #FFFFFF }, title : { text: , style: { display: none, } }, credits : { enabled : false }, exporting : { enabled : false }, rangeSelector : { enabled : false }, scrollbar : { enabled : false }, navigator : { enabled : false }, xAxis: { gridLineColor : rgba(233,232,233,.8), labels: { style : { color: #A9A8A9 } }, lineColor: #E9E8E9, }, yAxis: { gridLineColor : rgba(233,232,233,.5), labels: { align: left, x: 5, y: 3, style : { color: #A9A8A9 }, enabled : true }, showLastLabel: true, min: 0.0, startOnTick: false, tickPixelInterval: 40, }, series : { name : t.nic.dk (response time), data : metricDataPointszr6vk02bzhf0, tooltip: { valueSuffix: ms }, enableMouseTracking : ($(window).outerWidth() > 480) && true } , tooltip: { borderWidth: 0, enabled: ($(window).outerWidth() > 480) && true, headerFormat: span stylefont-size: 10px>{point.key} /span>, hideDelay: 300, pointFormat: span stylecolor:{point.color}>●/span> b>{point.y}/b>br/>, positioner: function() { return {x: 0, y: 0 }; }, shadow: false, shape: square, split: false } }); }); } var $timePeriodToggles HRB.utils.djshook(data-time-period-toggle); SP.currentPage.activeTimePeriodToggle function(period) { $timePeriodToggles.removeClass(active); $timePeriodToggles.filter(data-time-period + period + ).addClass(active); } SP.currentPage.getAndDisplayInitialChartData function() { if (window.location.hash #week) { SP.currentPage.getDataForTimePeriod(week); SP.currentPage.activeTimePeriodToggle(week); } else if (window.location.hash #month) { SP.currentPage.getDataForTimePeriod(month); SP.currentPage.activeTimePeriodToggle(month); } else { SP.currentPage.getDataForTimePeriod(day); SP.currentPage.activeTimePeriodToggle(day); } } $timePeriodToggles.on(click, function() { var newPeriod $(this).attr(data-time-period); SP.currentPage.activeTimePeriodToggle(newPeriod); SP.currentPage.getDataForTimePeriod(newPeriod); window.location.hash newPeriod; return false; }); SP.currentPage.getAndDisplayInitialChartData(); }) //> /script> script> /** INITIALIZATION **/ var recaptchaIds {} // Unfortunately theres no unique selectors on the parent divs that recaptcha adds. The first unique selector // is the iframe rendered 2 levels deep. So this waits until the iframes are added to the page, then finds // the parent div and sets the z index so that itll render above our modals & dropdowns from the start. function setZIndex(captchaCount, startTime) { // bail after 10s just in case so we dont do this forever if something whaky happens if (new Date() - startTime > 10000) { return; } var iframes document.querySelectorAll(iframetitlerecaptcha challenge); if (iframes.length ! captchaCount) { setTimeout(function() { setZIndex(captchaCount, startTime); }, 500); } for (var i 0; i iframes.length; i++) { // incident subscribe modal is 1050, so this has to be above that iframesi.parentElement.parentElement.style.zIndex 1100; } } function updateCaptchaIframeTitle(captchaCount, startTime, updates0) { if (new Date() - startTime > 10000 || captchaCount updates) { return; } var iframesWithTitle document.querySelectorAll(iframetitlerecaptcha challenge expires in two minutes); if (iframesWithTitle.length ! captchaCount) { setTimeout(function() { updateCaptchaIframeTitle(captchaCount, startTime, iframesWithTitle.length + updates); }, 500); } for (var i 0; i iframesWithTitle.length; i++) { iframesWithTitlei.title recaptcha; } } function addIncidentCaptcha() { var incidentCaptcha document.createElement(div); incidentCaptcha.setAttribute(id, subscribe-incident-recaptcha); incidentCaptcha.setAttribute(class, g-recaptcha); incidentCaptcha.setAttribute(data-sitekey, 6LcZ-b0UAAAAAENi956aWzynTT2ZJ80dGU3F80Op); incidentCaptcha.setAttribute(data-callback, submitIncidentSubscriberSuccess); incidentCaptcha.setAttribute(data-error-callback, submitIncidentSubscriberError); incidentCaptcha.setAttribute(data-size, invisible); document.body.appendChild(incidentCaptcha); var incidentCode document.createElement(input); incidentCode.setAttribute(type, hidden); incidentCode.setAttribute(id, submit_incident_code); document.body.appendChild(incidentCode); } var onloadCallback function() { // if there is an incident, then add incident captcha element if (document.getElementsByClassName(modal-open-incident-subscribe).length > 0) { addIncidentCaptcha(); } var captchas document.getElementsByClassName(g-recaptcha); for(var i 0; i captchas.length; i++) { var elId captchasi.id; recaptchaIdselId grecaptcha.enterprise.render(elId); } setZIndex(captchas.length, new Date()); updateCaptchaIframeTitle(captchas.length, new Date()); } /** SUBSCRIBE DROPDOWN */ // callbacks for captcha success function submitNewSubscriber(type, error) { if (error) document.querySelector(#subscribe-form- + type + #captcha_error).value true; document.getElementById(subscribe-form- + type).dispatchEvent(new Event(submit, {bubbles: true, cancelable: true})); grecaptcha.enterprise.reset(recaptchaIdssubscribe-btn- + type); } function submitNewEmailSubscriber(token) { submitNewSubscriber(email); } function submitNewSmsSubscriber(token) { submitNewSubscriber(sms); } function submitNewWebhookSubscriber(token) { submitNewSubscriber(webhook); } function submitIncidentSubscriber(token, error) { var incidentCode document.getElementById(submit_incident_code).value; var incidentForm document.getElementById(subscribe-form- + incidentCode); incidentForm.querySelector(inputnamecaptcha_error).value error; incidentForm.querySelector(inputnameg-recaptcha-response).value token; incidentForm.dispatchEvent(new Event(submit, {bubbles: true, cancelable: true})); grecaptcha.enterprise.reset(recaptchaIdssubscribe-incident-recaptcha); } function submitIncidentSubscriberSuccess(token) { submitIncidentSubscriber(token, false); } // callbacks if we get captcha network errors function emailSubscriberCaptchaError(token) { submitNewSubscriber(email, true); } function smsSubscriberCaptchaError(token) { submitNewSubscriber(sms, true); } function webhookSubscriberCaptchaError(token) { submitNewSubscriber(webhook, true); } function submitIncidentSubscriberError(token) { submitIncidentSubscriber(token, true); } // tracking clicks email, sms, webhook.forEach(function(type) { var el document.getElementById(subscribe-btn- + type); el && el.addEventListener(click, function() { $.ajax({ type: POST, url: /subscriptions/track_attempt, data: { type: type } }) }) }) // form submission success callbacks $(#subscribe-form-email).on(ajax:success, function(e, data, status, xhr){ if (data.type success) { SP.currentPage.updatesDropdown.hide(); document.getElementById(email).value ; } }); $(#subscribe-form-sms).on(ajax:success, function(e, data, status, xhr){ if (data.type success && data.otp_flow ! true) { SP.currentPage.updatesDropdown.hide(); document.getElementById(phone-number).value ; } }); $(#subscribe-form-webhook).on(ajax:success, function(e, data, status, xhr){ if (data.type success) { SP.currentPage.updatesDropdown.hide(); document.getElementById(endpoint-webhooks).value ; document.getElementById(email-webhooks).value ; } }); $(a.subscribe).on(click, function() { document.body.style.overflow hidden; document.body.style.height 100vh; }); $(div.modal-open-incident-subscribe).on(hidden, function(){ document.body.style.overflow ; document.body.style.height ; }); function submitCaptchaIncidentSubscribe(event) { var incidentCode event.target.id.split(-)2; event.preventDefault(); $.ajax({ type: POST, url: /subscriptions/track_attempt, data: { type: incident } }) document.getElementById(submit_incident_code).value incidentCode; grecaptcha.enterprise.execute(recaptchaIdssubscribe-incident-recaptcha); }/script>script srchttps://www.recaptcha.net/recaptcha/enterprise.js?onloadonloadCallback&renderexplicit async defer>/script> script srchttps://dka575ofm4ao0.cloudfront.net/packs/common-4437b1edb40d550663e6.chunk.js>/script> script srchttps://dka575ofm4ao0.cloudfront.net/packs/globals-f12471d5e878ec0f0705.chunk.js>/script> script srchttps://dka575ofm4ao0.cloudfront.net/packs/runtime-08032479de648cdef21e.js>/script> script> window.addEventListener(load, function () { const urlParams new URLSearchParams(window.location.search); const messageToken urlParams.get(slack_message_token); const channelName escape(urlParams.get(channel_name)); if(!!messageToken) { switch(messageToken) { case slack_auth_error: HRB.utils.notify(The Slack authorization attempt was unsuccessful. Try again., {cssClass:error}); break; case subscribers_disabled_error: HRB.utils.notify(Slack subscriptions are not enabled on this page., {cssClass:error}); break; case direct_message_channel_error: HRB.utils.notify(Subscriptions aren’t supported in direct messages. Try subscribing again and choose a channel instead., {cssClass:error}); break case duplicate_error: HRB.utils.notify(Youre already subscribed to get Slack notifications in that channel., {cssClass:error}); break; case duplicate_private_channel_error: HRB.utils.notify(`Youre already subscribed to get Slack notifications in #${channelName}. Invite the @Statuspage app to that channel to start getting status updates.`, {cssClass: error}); break; case default_success: HRB.utils.notify(Youre now subscribed to get Statuspage updates in Slack!, {cssClass:success}); break; case private_channel_success: HRB.utils.notify(`IMPORTANT: Invite the @Statuspage app to your Slack channel #${channelName} to start getting status updates.`, {cssClass:success}); break; } } });/script> !-- FOR FLASH NOTICES -->!-- FOR ERROR --> script> $(function() { var $link $(span classcolor-secondary powered-by>a classcolor-secondary target_blank relnoopener noreferrer nofollow hrefhttps://www.atlassian.com/software/statuspage?utm_campaignstatus.punktum.dk&utm_contentSP-notifications&utm_mediumpowered-by&utm_sourceinapp>Powered by Atlassian Statuspage/a>/span>); var setPoweredByStyles function() { if (!$(.powered-by).length) { $link.appendTo($(.page-footer)) } $(.powered-by).attr(style, display: inline !important; visibility:visible !important; opacity: 1 !important; position:static !important; text-indent:0px !important; transform:scale(1) !important); } setInterval(setPoweredByStyles, 1000); });/script> /body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]