CINXE.COM
RubyGems.org Status
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- force IE browsers in compatibility mode to use their most aggressive rendering engine --> <meta charset="utf-8"> <title>RubyGems.org Status</title> <meta name="description" content="Welcome to RubyGems.org's home for real-time and historical data on system performance."> <!-- Mobile viewport optimization --> <meta name="HandheldFriendly" content="True"> <meta name="MobileOptimized" content="320"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"> <!-- Time this page was rendered - http://purl.org/dc/terms/issued --> <meta name="issued" content="1732734499"> <!-- Mobile IE allows us to activate ClearType technology for smoothing fonts for easy reading --> <meta http-equiv="cleartype" content="on"> <!-- Le fonts --> <style> @font-face { font-family: 'proxima-nova'; src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-f0b2f7c12b6b87c65c02d3c1738047ea67a7607fd767056d8a2964cc6a2393f7.eot?host=status.rubygems.org'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-f0b2f7c12b6b87c65c02d3c1738047ea67a7607fd767056d8a2964cc6a2393f7.eot?host=status.rubygems.org#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-e642ffe82005c6208632538a557e7f5dccb835c0303b06f17f55ccf567907241.woff?host=status.rubygems.org') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-0f094da9b301d03292f97db5544142a16f9f2ddf50af91d44753d9310c194c5f.ttf?host=status.rubygems.org') format('truetype'); font-weight:300; font-style:normal; } @font-face { font-family: 'proxima-nova'; src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-366d17769d864aa72f27defaddf591e460a1de4984bb24dacea57a9fc1d14878.eot?host=status.rubygems.org'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-366d17769d864aa72f27defaddf591e460a1de4984bb24dacea57a9fc1d14878.eot?host=status.rubygems.org#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-2ee4c449a9ed716f1d88207bd1094e21b69e2818b5cd36b28ad809dc1924ec54.woff?host=status.rubygems.org') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-a40a469edbd27b65b845b8000d47445a17def8ba677f4eb836ad1808f7495173.ttf?host=status.rubygems.org') format('truetype'); font-weight:400; font-style:normal; } @font-face { font-family: 'proxima-nova'; src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-0bf83a850b45e4ccda15bd04691e3c47ae84fec3588363b53618bd275a98cbb7.eot?host=status.rubygems.org'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-0bf83a850b45e4ccda15bd04691e3c47ae84fec3588363b53618bd275a98cbb7.eot?host=status.rubygems.org#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-0c394ec7a111aa7928ea470ec0a67c44ebdaa0f93d1c3341abb69656cc26cbdd.woff?host=status.rubygems.org') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-9e43859f8015a4d47d9eaf7bafe8d1e26e3298795ce1f4cdb0be0479b8a4605e.ttf?host=status.rubygems.org') format('truetype'); font-weight:400; font-style:italic; } @font-face { font-family: 'proxima-nova'; src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaSemibold-09566917307251d22021a3f91fc646f3e45f8d095209bcd2cded8a1979f06e54.eot?host=status.rubygems.org'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaSemibold-09566917307251d22021a3f91fc646f3e45f8d095209bcd2cded8a1979f06e54.eot?host=status.rubygems.org#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaSemibold-86724fb2152613d735ba47c3f47a9ad2424b898bea4bece213dacee40344f966.woff?host=status.rubygems.org') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaSemibold-cf3e4eb7fbdf6fb83e526cc2a0141e55b01097e6e1abfd4cbdc3eda75d183f74.ttf?host=status.rubygems.org') format('truetype'); font-weight:500; font-style:normal; } @font-face { font-family: 'proxima-nova'; src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaBold-622ea489d20e12e691663f83217105e957e2d3d09703707d40155a29c06cc9d9.eot?host=status.rubygems.org'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaBold-622ea489d20e12e691663f83217105e957e2d3d09703707d40155a29c06cc9d9.eot?host=status.rubygems.org#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaBold-c8dc577ff7f76d2fc199843e38c04bb2e9fd15889421358d966a9f846c2ed1cd.woff?host=status.rubygems.org') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaBold-27177fe9242acbe089276ee587feef781446667ffe9b6fdc5b7fe21ad73e12f3.ttf?host=status.rubygems.org') format('truetype'); font-weight:700; font-style:normal; } </style> <link rel="shortcut icon" type="image/x-icon" href="//dka575ofm4ao0.cloudfront.net/pages-favicon_logos/original/18760/a0fewfVAQMCRIAXMG9Np" /> <link rel="shortcut icon" href='//dka575ofm4ao0.cloudfront.net/pages-favicon_logos/original/18760/a0fewfVAQMCRIAXMG9Np'> <link rel="alternate" type="application/atom+xml" href="https://status.rubygems.org/history.atom" title="RubyGems.org Status History - Atom Feed"> <link rel="alternate" type="application/rss+xml" href="https://status.rubygems.org/history.rss" title="RubyGems.org Status History - RSS Feed"> <!-- Canonical Link to ensure that only the custom domain is indexed when present --> <link rel="canonical" href="https://status.rubygems.org"> <meta name="_globalsign-domain-verification" content="y_VzfckMy4iePo5oDJNivyYIjh8LffYa4jzUndm_bZ"/> <link rel="alternate" type="application/atom+xml" title="ATOM" href="https://status.rubygems.org/history.atom" /> <!-- Le styles --> <link rel="stylesheet" media="screen" href="https://dka575ofm4ao0.cloudfront.net/packs/0.8826066e0f95dc57bbe6.css" /> <link rel="stylesheet" media="all" href="https://dka575ofm4ao0.cloudfront.net/assets/status/status_manifest-260e48dd9b8c9b04e8d6c6286f76aecb8ac22f273beea6dba3eee902141bcbfe.css" /> <script src="https://dka575ofm4ao0.cloudfront.net/assets/jquery-3.5.1.min-729e416557a365062a8a20f0562f18aa171da57298005d392312670c706c68de.js"></script> <script> window.pageColorData = {"blue":"#3498DB","border":"#E0E0E0","body_background":"#fff","font":"#333333","graph":"#4fcc9c","green":"#4fcc9c","light_font":"#AAAAAA","link":"#e9573f","orange":"#e67e22","red":"#e9573f","yellow":"#f1c40f","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, div[id^="subscribe-modal"] .modal-footer, div[id^="subscribe-modal"], div[id^="updates-dropdown"] .updates-dropdown-section, #uptime-tooltip .tooltip-box { background-color:#fff; } #uptime-tooltip .pointer-container .pointer-smaller { border-bottom-color:#fff; } /* 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, div[id^="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:#AAAAAA; } /* 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, div[id^="subscribe-modal"], #uptime-tooltip .tooltip-box { border-color:#E0E0E0; } div[id^="subscribe-modal"] .modal-footer, .markdown-display table td { border-top-color:#E0E0E0; } .markdown-display table td + td, .markdown-display table th + th { border-left-color:#E0E0E0; } div[id^="subscribe-modal"] .modal-header, #uptime-tooltip .pointer-container .pointer-larger { border-bottom-color:#E0E0E0; } #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(224,224,224,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, it's opaque css_border_color. */ border-color: rgba(224,224,224,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:#e9573f; } .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:#e9573f; } .layout-content.status.status-index .unresolved-incident.impact-critical .updates { border-color:#e9573f; } /* 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:#e67e22; } .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:#e67e22; } .layout-content.status.status-index .unresolved-incident.impact-major .updates { border-color:#e67e22; } /* 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:#f1c40f; } .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:#f1c40f; } .layout-content.status.status-index .unresolved-incident.impact-minor .updates, .layout-content.status.status-index .scheduled-incidents-container { border-color:#f1c40f; } /* 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:#3498DB; } .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:#3498DB; } .layout-content.status.status-index .unresolved-incident.impact-maintenance .updates, .layout-content.status.status-index .scheduled-incidents-container { border-color:#3498DB; } /* 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:#4fcc9c; } .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:#4fcc9c; } /* 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:#e9573f; } .flat-button, .masthead .updates-dropdown-container .show-updates-dropdown, .layout-content.status-full-history .show-filter.open { background-color:#e9573f; } /* CUSTOM COLOR OVERRIDES FOR UPTIME SHOWCASE */ .components-section .components-uptime-link { color: #aaaaaa; } .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item { color: #aaaaaa; opacity: 1; } .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item.light { color: #aaaaaa; opacity: 1; } .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .spacer { background: #aaaaaa; opacity: 1; } </style> <!-- custom css --> <link rel="stylesheet" type="text/css" href="//dka575ofm4ao0.cloudfront.net/page_display_customizations-custom_css_externals/18710/external20160106-11244-x3vwol.css"> <!-- polyfills --> <script crossorigin="anonymous" src="https://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 class="status index status-maintenance"> <div class="layout-content status status-index starter"> <div class="custom-header-container"> <header id="custom-header"> <div class="container"> <div class="logo-container"> <a href="https://rubygems.org/" target="_blank" class="logo"> <img class="logo" src="https://statuspage-custom-html-help.s3.amazonaws.com/rubygems/rubygems_logo.png"> </a> </div> <nav> <a href="https://rubygems.org/" target="_blank" class="rubygems-link"></a> <a href="http://help.rubygems.org/" target="_blank" class="help-link"></a> <div id="replace-with-subscribe"></div> </nav> <div class="clearfix"></div> </div> </header> <div class="intro-text container"> <div class="big">Status</div> <div class="small-text"> Welcome to the <strong>RubyGems.org</strong> status page. Here you will find real-time information about the status of our services. </div> </div> <div class="updates-dropdown-container" data-js-hook="updates-dropdown-container"> <a href="#" data-js-hook="show-updates-dropdown" id="show-updates-dropdown" class="show-updates-dropdown" aria-label="Subscribe to updates" aria-expanded="false" aria-haspopup="dialog" role="button"> </a> <!-- Accessibility guidelines for tabs: https://www.w3.org/TR/wai-aria-practices-1.1/examples/tabs/tabs-1/tabs.html --> <div class="updates-dropdown" data-js-hook="updates-dropdown" id="updates-dropdown" style="display:none"> <div class="updates-dropdown-nav nav-items-4" role="tablist" aria-label="Subscribe to updates"> <a href="#updates-dropdown-twitter" aria-controls="updates-dropdown-twitter" aria-label="Subscribe via twitter" role="tab" id="updates-dropdown-twitter-btn"> <span class="icon-container twitter"> </a> <a href="#updates-dropdown-support" aria-controls="updates-dropdown-support" aria-label="Contact support" role="tab" id="updates-dropdown-support-btn"> <span class="icon-container support"> </a> <a href="#updates-dropdown-atom" aria-controls="updates-dropdown-atom" aria-label="Subscribe via RSS" role="tab" id="updates-dropdown-atom-btn"> <span class="icon-container rss"> </a> <button data-js-hook="updates-dropdown-close" aria-label="Close subscribe form" id="updates-dropdown-close-btn"> x </button> </div> <div class="updates-dropdown-sections-container"> <div class="updates-dropdown-section twitter" id="updates-dropdown-twitter" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-twitter-btn"> <a href="https://twitter.com/rubygems_status" class="twitter-follow-button" data-show-count="false" data-show-screen-name="true" data-width="59px">Follow @rubygems_status</a> or <a href="https://twitter.com/rubygems_status" target="_blank">view our profile</a>. <style> .twitter-follow-button { margin-bottom: -6px; } </style> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script> </div> <div class="updates-dropdown-section support" id="updates-dropdown-support" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-support-btn"> Visit our <a target="_blank" href="http://help.rubygems.org/">support site</a>. </div> <div class="updates-dropdown-section atom" id="updates-dropdown-atom" role="tabpanel" aria-labelledby="updates-dropdown-atom-btn"> Get the <a href="https://status.rubygems.org/history.atom" target="_blank">Atom Feed</a> or <a href="https://status.rubygems.org/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, we're currently not supporting text subscriptions in Singapore.<a href="https://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.options[dropdown.selectedIndex]; const otpEnabled = selectedOption.getAttribute('data-otp-enabled'); wrapperDiv.setAttribute('data-otp-enabled', otpEnabled); dropdown.addEventListener('change', function() { const selectedOption = dropdown.options[dropdown.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 = "pclby00q90vc" 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 = "pclby00q90vc" 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> <div class="container"> <div class="page-status status-maintenance"> <span class="status font-large"> Service Under Maintenance </span> <span class="last-updated-stamp font-small"></span> </div> <div class="components-section font-regular"> <i class="component-status hidden major_outage"></i> <div class="components-uptime-link history-footer-link"> Uptime over the past <var data-var="num" data-pluralize="90">90</var> days. <a href="/uptime">View historical uptime.</a> </div> <div class="components-container one-column"> <div class="component-container border-color"> <div data-component-id="kp4jnf6yvw5s" class="component-inner-container status-green showcased" data-component-status="operational" data-js-hook=""> <span class="name"> Gem Downloads </span> <span class="tooltip-base tool" title="Provides indexes, specs, and .gem files">?</span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> <div class="shared-partial uptime-90-days-wrapper"> <svg class="availability-time-line-graphic" id="uptime-component-kp4jnf6yvw5s" preserveAspectRatio="none" height="34" viewBox="0 0 448 34"> <rect height="34" width="3" x="0" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-0" data-html="true" tabindex="0" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="5" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-1" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="10" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-2" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="15" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-3" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="20" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-4" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="25" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-5" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="30" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-6" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="35" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-7" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="40" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-8" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="45" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-9" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="50" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-10" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="55" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-11" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="60" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-12" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="65" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-13" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="70" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-14" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="75" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-15" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="80" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-16" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="85" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-17" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="90" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-18" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="95" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-19" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="100" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-20" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="105" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-21" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="110" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-22" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="115" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-23" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="120" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-24" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="125" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-25" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="130" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-26" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="135" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-27" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="140" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-28" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="145" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-29" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="150" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-30" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="155" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-31" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="160" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-32" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="165" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-33" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="170" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-34" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="175" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-35" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="180" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-36" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="185" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-37" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="190" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-38" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="195" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-39" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="200" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-40" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="205" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-41" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="210" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-42" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="215" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-43" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="220" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-44" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="225" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-45" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="230" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-46" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="235" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-47" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="240" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-48" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="245" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-49" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="250" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-50" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="255" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-51" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="260" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-52" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="265" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-53" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="270" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-54" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="275" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-55" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="280" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-56" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="285" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-57" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="290" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-58" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="295" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-59" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="300" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-60" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="305" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-61" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="310" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-62" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="315" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-63" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="320" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-64" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="325" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-65" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="330" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-66" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="335" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-67" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="340" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-68" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="345" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-69" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="350" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-70" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="355" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-71" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="360" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-72" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="365" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-73" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="370" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-74" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="375" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-75" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="380" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-76" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="385" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-77" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="390" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-78" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="395" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-79" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="400" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-80" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="405" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-81" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="410" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-82" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="415" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-83" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="420" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-84" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="425" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-85" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="430" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-86" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="435" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-87" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="440" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-88" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="445" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-kp4jnf6yvw5s day-89" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> </svg> <div class="legend "> <div class="legend-item light legend-item-date-range"> <span class="availability-time-line-legend-day-count">90</span> days ago </div> <div class="spacer"></div> <div class="legend-item legend-item-uptime-value legend-item-kp4jnf6yvw5s"> <span id="uptime-percent-kp4jnf6yvw5s"> <var data-var="uptime-percent">100.0</var> </span> % uptime </div> <div class="spacer"></div> <div class="legend-item light legend-item-date-range">Today</div> </div> </div> </div> </div> <div class="component-container border-color"> <div data-component-id="cmny3b4lqf38" class="component-inner-container status-green showcased" data-component-status="operational" data-js-hook=""> <span class="name"> Application </span> <span class="tooltip-base tool" title="RubyGems.org website and API">?</span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> <div class="shared-partial uptime-90-days-wrapper"> <svg class="availability-time-line-graphic" id="uptime-component-cmny3b4lqf38" preserveAspectRatio="none" height="34" viewBox="0 0 448 34"> <rect height="34" width="3" x="0" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-0" data-html="true" tabindex="0" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="5" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-1" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="10" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-2" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="15" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-3" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="20" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-4" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="25" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-5" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="30" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-6" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="35" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-7" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="40" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-8" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="45" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-9" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="50" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-10" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="55" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-11" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="60" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-12" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="65" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-13" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="70" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-14" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="75" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-15" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="80" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-16" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="85" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-17" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="90" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-18" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="95" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-19" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="100" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-20" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="105" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-21" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="110" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-22" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="115" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-23" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="120" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-24" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="125" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-25" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="130" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-26" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="135" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-27" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="140" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-28" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="145" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-29" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="150" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-30" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="155" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-31" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="160" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-32" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="165" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-33" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="170" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-34" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="175" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-35" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="180" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-36" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="185" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-37" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="190" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-38" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="195" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-39" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="200" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-40" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="205" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-41" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="210" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-42" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="215" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-43" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="220" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-44" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="225" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-45" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="230" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-46" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="235" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-47" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="240" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-48" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="245" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-49" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="250" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-50" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="255" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-51" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="260" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-52" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="265" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-53" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="270" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-54" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="275" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-55" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="280" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-56" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="285" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-57" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="290" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-58" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="295" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-59" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="300" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-60" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="305" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-61" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="310" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-62" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="315" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-63" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="320" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-64" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="325" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-65" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="330" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-66" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="335" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-67" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="340" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-68" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="345" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-69" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="350" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-70" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="355" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-71" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="360" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-72" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="365" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-73" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="370" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-74" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="375" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-75" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="380" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-76" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="385" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-77" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="390" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-78" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="395" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-79" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="400" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-80" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="405" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-81" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="410" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-82" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="415" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-83" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="420" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-84" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="425" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-85" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="430" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-86" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="435" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-87" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="440" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-88" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="445" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-cmny3b4lqf38 day-89" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> </svg> <div class="legend "> <div class="legend-item light legend-item-date-range"> <span class="availability-time-line-legend-day-count">90</span> days ago </div> <div class="spacer"></div> <div class="legend-item legend-item-uptime-value legend-item-cmny3b4lqf38"> <span id="uptime-percent-cmny3b4lqf38"> <var data-var="uptime-percent">100.0</var> </span> % uptime </div> <div class="spacer"></div> <div class="legend-item light legend-item-date-range">Today</div> </div> </div> </div> </div> <div class="component-container border-color"> <div data-component-id="3mqrrjdkm1l8" class="component-inner-container status-green showcased" data-component-status="operational" data-js-hook=""> <span class="name"> Dependency API </span> <span class="tooltip-base tool" title="Used by command line tools to install gems.">?</span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> <div class="shared-partial uptime-90-days-wrapper"> <svg class="availability-time-line-graphic" id="uptime-component-3mqrrjdkm1l8" preserveAspectRatio="none" height="34" viewBox="0 0 448 34"> <rect height="34" width="3" x="0" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-0" data-html="true" tabindex="0" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="5" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-1" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="10" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-2" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="15" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-3" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="20" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-4" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="25" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-5" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="30" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-6" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="35" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-7" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="40" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-8" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="45" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-9" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="50" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-10" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="55" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-11" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="60" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-12" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="65" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-13" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="70" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-14" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="75" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-15" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="80" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-16" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="85" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-17" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="90" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-18" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="95" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-19" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="100" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-20" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="105" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-21" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="110" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-22" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="115" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-23" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="120" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-24" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="125" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-25" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="130" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-26" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="135" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-27" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="140" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-28" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="145" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-29" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="150" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-30" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="155" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-31" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="160" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-32" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="165" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-33" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="170" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-34" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="175" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-35" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="180" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-36" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="185" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-37" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="190" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-38" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="195" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-39" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="200" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-40" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="205" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-41" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="210" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-42" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="215" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-43" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="220" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-44" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="225" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-45" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="230" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-46" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="235" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-47" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="240" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-48" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="245" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-49" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="250" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-50" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="255" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-51" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="260" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-52" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="265" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-53" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="270" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-54" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="275" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-55" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="280" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-56" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="285" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-57" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="290" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-58" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="295" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-59" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="300" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-60" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="305" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-61" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="310" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-62" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="315" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-63" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="320" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-64" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="325" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-65" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="330" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-66" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="335" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-67" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="340" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-68" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="345" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-69" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="350" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-70" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="355" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-71" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="360" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-72" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="365" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-73" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="370" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-74" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="375" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-75" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="380" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-76" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="385" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-77" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="390" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-78" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="395" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-79" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="400" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-80" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="405" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-81" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="410" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-82" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="415" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-83" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="420" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-84" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="425" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-85" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="430" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-86" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="435" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-87" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="440" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-88" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="445" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-3mqrrjdkm1l8 day-89" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> </svg> <div class="legend "> <div class="legend-item light legend-item-date-range"> <span class="availability-time-line-legend-day-count">90</span> days ago </div> <div class="spacer"></div> <div class="legend-item legend-item-uptime-value legend-item-3mqrrjdkm1l8"> <span id="uptime-percent-3mqrrjdkm1l8"> <var data-var="uptime-percent">100.0</var> </span> % uptime </div> <div class="spacer"></div> <div class="legend-item light legend-item-date-range">Today</div> </div> </div> </div> </div> <div class="component-container border-color"> <div data-component-id="s0x75157gnt4" class="component-inner-container status-green showcased" data-component-status="operational" data-js-hook=""> <span class="name"> Gem Index API </span> <span class="tooltip-base tool" title="Gem metadata via the new index format.">?</span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> <div class="shared-partial uptime-90-days-wrapper"> <svg class="availability-time-line-graphic" id="uptime-component-s0x75157gnt4" preserveAspectRatio="none" height="34" viewBox="0 0 448 34"> <rect height="34" width="3" x="0" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-0" data-html="true" tabindex="0" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="5" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-1" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="10" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-2" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="15" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-3" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="20" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-4" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="25" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-5" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="30" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-6" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="35" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-7" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="40" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-8" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="45" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-9" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="50" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-10" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="55" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-11" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="60" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-12" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="65" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-13" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="70" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-14" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="75" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-15" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="80" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-16" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="85" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-17" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="90" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-18" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="95" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-19" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="100" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-20" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="105" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-21" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="110" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-22" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="115" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-23" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="120" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-24" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="125" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-25" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="130" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-26" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="135" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-27" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="140" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-28" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="145" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-29" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="150" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-30" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="155" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-31" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="160" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-32" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="165" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-33" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="170" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-34" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="175" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-35" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="180" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-36" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="185" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-37" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="190" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-38" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="195" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-39" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="200" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-40" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="205" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-41" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="210" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-42" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="215" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-43" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="220" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-44" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="225" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-45" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="230" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-46" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="235" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-47" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="240" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-48" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="245" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-49" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="250" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-50" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="255" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-51" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="260" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-52" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="265" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-53" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="270" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-54" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="275" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-55" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="280" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-56" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="285" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-57" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="290" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-58" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="295" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-59" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="300" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-60" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="305" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-61" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="310" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-62" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="315" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-63" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="320" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-64" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="325" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-65" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="330" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-66" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="335" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-67" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="340" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-68" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="345" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-69" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="350" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-70" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="355" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-71" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="360" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-72" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="365" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-73" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="370" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-74" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="375" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-75" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="380" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-76" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="385" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-77" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="390" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-78" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="395" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-79" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="400" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-80" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="405" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-81" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="410" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-82" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="415" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-83" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="420" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-84" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="425" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-85" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="430" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-86" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="435" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-87" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="440" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-88" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="445" y="0" fill="#4fcc9c" role="tab" class="uptime-day component-s0x75157gnt4 day-89" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> </svg> <div class="legend "> <div class="legend-item light legend-item-date-range"> <span class="availability-time-line-legend-day-count">90</span> days ago </div> <div class="spacer"></div> <div class="legend-item legend-item-uptime-value legend-item-s0x75157gnt4"> <span id="uptime-percent-s0x75157gnt4"> <var data-var="uptime-percent">100.0</var> </span> % uptime </div> <div class="spacer"></div> <div class="legend-item light legend-item-date-range">Today</div> </div> </div> </div> </div> <div class="component-container border-color"> <div data-component-id="73m536qqzvyc" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Upstream Provider: AWS </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> </div> <div class="component-container border-color"> <div data-component-id="69w0bvxm0bcp" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Upstream Provider: DNSimple Name Servers </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> </div> <div class="component-container border-color is-group open"> <div data-component-id="zndjv0b4vb9w" class="component-inner-container status-blue " data-component-status="under_maintenance" data-js-hook="component-group-opener"> <span class="name"> <span class="fa group-parent-indicator color-secondary font-small fa-minus-square-o" role="button" aria-expanded="true" aria-label="Toggle Upstream Provider: Fastly" tabindex="0"></span> <span> Upstream Provider: Fastly </span> </span> <span class="component-status tool" title="Groups take on the status of their most degraded child component or service. Click to see the status of the individual children." > Under Maintenance </span> <span class="tool icon-indicator fa fa-wrench" title="Under Maintenance"></span> </div> <!-- children components --> <div class="child-components-container "> <div data-component-id="tpfhhywww2bz" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Frankfurt (FRA) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="x5kdrt8y4kj0" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Sydney (SYD) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="9jqdqwv1z3sn" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Amsterdam (AMS) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="9yj3wmd8k37p" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Ashburn (IAD) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="7ymbvjsb1trh" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Singapore (SIN) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="pt8q78vygmf7" class="component-inner-container status-blue " data-component-status="under_maintenance" data-js-hook=""> <span class="name"> Fastly London (LCY) </span> <span class="component-status " title="" > Under Maintenance </span> <span class="tool icon-indicator fa fa-wrench" title="Under Maintenance"></span> </div> <div data-component-id="55252dgqj3h8" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Denver (DEN) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="066hy8s9h9yy" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly London (LHR) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="fq0xbxkmnd6s" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly New Zealand (AKL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="vgmbx385t1l5" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Chicago (ORD) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="x2xynd0zvnyz" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly New Zealand (WLG) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="t7yk2z5tpwd5" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Stockholm (BMA) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="fym9c5x8sj6q" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Hong Kong (HKG) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="1dw2lx1dgv0m" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Miami (MIA) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="1xn96q2vv5ww" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Dallas (DFW) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="92svw7y4p96l" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Melbourne (MEL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="g7mk70hkhzyw" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Osaka (ITM) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="33qhgw052g1f" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly San Jose (SJC) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="4f7h0bvr5ql4" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Brisbane (BNE) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="wt7ky6tr45r8" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Seattle (SEA) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="lt6c5krsbqdh" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Dubai (FJR) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="cfdbqhgcpdy4" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Perth (PER) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="fyj51ch9x36s" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Frankfurt (HHN) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="6m22nhbg6sf9" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Paris (CDG) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="gvznxjp7xp3n" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Madrid (MAD) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="8725x6d82w8s" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Boston (BOS) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="nk9fghhbw15t" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Minneapolis (MSP) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="0yj70vwwpfq0" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Johannesburg (JNB) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="my7cvqjj1b6y" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Montreal (YUL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="f4lvh2hgwvjd" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Toronto (YYZ) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="lbyfx52995vr" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly S膩o Paulo (GRU) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="hgg42j2tl2yt" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Tokyo (HND) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="95wfs0b94fl0" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Tokyo (TYO) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="w0z1qvfb5925" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Singapore (QPG) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="xjm264p5bt3d" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Tokyo (NRT) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="jx436hmj6l8m" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Copenhagen (CPH) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="b3pg0657c9w5" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Dublin (DUB) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="br6sb3629k3n" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Helsinki (HEL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="vqhk6fm6g73d" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly London (LON) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="p6hyklnl7qdj" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Manchester (MAN) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="qb2gntd2ppsj" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Marseille (MRS) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="xhqb5xt69b4m" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Milan (MXP) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="s6yhny6hptcf" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Oslo (OSL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="gmvzsthrf1dn" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Vienna (VIE) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="zwtrpdytlmmr" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Munich (MUC) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="sxlbgx7lzpb6" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Chennai (MAA) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="ng2q8j4ycq2y" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Mumbai (BOM) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="6gxz39y5j5zz" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly New Delhi (DEL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="q563znd81zyy" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Ashburn (BWI) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="6gyjm0b71wcm" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Ashburn (DCA) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="gl78wmv4w7x6" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Ashburn (WDC) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="yt3bz7dv16nx" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Atlanta (FTY) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="h17mltx7h691" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Atlanta (PDK) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="34srfdqn80c4" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Chicago (CHI) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="fvczpt36p8jc" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Chicago (MDW) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="wqf15s0pvfvp" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Chicago (PWK) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="67fxlsnvxd1z" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Columbus (CMH) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="g1z63rr40ynq" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Columbus (LCK) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="byf64klptfwt" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Dallas (DAL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="782fvj8mnm1f" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Houston (IAH) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="pg1cwrsv3knw" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Jacksonville (JAX) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="cr7rh46xjkdq" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Kansas City (MCI) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="k50g9230bfn5" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Los Angeles (BUR) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="lcnnyj16bn6j" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Los Angeles (LGB) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="skt1yhhyb4sq" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Minneapolis (STP) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="sf63h8clz6jc" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly New York (LGA) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="wsxj6kzn5hhr" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Newark (EWR) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="d3kds9s3fjc2" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Palo Alto (PAO) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="pd1988zpg9h0" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Phoenix (PHX) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="ts0xprr2ym5h" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Portland (PDX) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="qp3rt37dtpqg" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly St. Louis (STL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="y7yl17qhwm40" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Vancouver (YVR) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="g2v6r88wqs1m" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Cape Town (CPT) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="78wjkcvvrmhw" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Buenos Aires (EZE) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="77wj6jyhjxr7" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Bogota (BOG) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="f1rzmb9c048l" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Curitiba (CWB) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="j0rxrq0slplq" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Rio de Janeiro (GIG) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="jd998vgfcjwf" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Santiago (SCL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="jdzjfhmjvhzb" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly S膩o Paulo (CGH) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="rqgh2l419924" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Lima (LIM) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> </div> </div> </div> <div class="component-statuses-legend font-small"> <div class="legend-item status-green"> <span class="icon-indicator fa fa-check"></span> Operational </div> <div class="legend-item status-yellow"> <span class="icon-indicator fa fa-minus-square"></span> Degraded Performance </div> <div class="legend-item status-orange"> <span class="icon-indicator fa fa-exclamation-triangle"></span> Partial Outage </div> <div class="breaker"></div> <div class="legend-item status-red"> <span class="icon-indicator fa fa-times"></span> Major Outage </div> <div class="legend-item status-blue"> <span class="icon-indicator fa fa-wrench"></span> Maintenance </div> </div> </div> <script type="text/javascript" charset="utf-8"> function calculateViewbox (dayCount, rectWidth, rectPadding) { var viewBox = []; if (dayCount === 90) { viewBox.push(0); } else { var offset = 90 - dayCount; viewBox.push((offset * rectWidth) + (rectPadding * (offset))); // x origin } viewBox.push(0); // y origin viewBox.push((rectWidth * dayCount) + (rectPadding * (dayCount - 1))); // svg width viewBox.push(34); // svg height return viewBox.join(' '); } document.addEventListener('DOMContentLoaded', function () { var MAX_WIDTH_30_DAYS = 600, MAX_WIDTH_60_DAYS = 1024, svgs = document.getElementsByClassName('availability-time-line-graphic'), rects = svgs[0].getElementsByTagName('rect'), rectWidth = parseInt(rects[0].getAttribute('width')), rectPadding = parseInt(rects[1].getAttribute('x')) - parseInt(rects[0].getAttribute('x')) - rectWidth, throttled = false, delay = 150, timeoutId; function getKeyAndCount(width) { if (width <= MAX_WIDTH_30_DAYS) { return { dayCount: 30, uptimeKey: 'thirty'} } else if (width <= MAX_WIDTH_60_DAYS) { return { dayCount: 60, uptimeKey: 'sixty'} } else { return { dayCount: 90, uptimeKey: 'ninety'} } } function setUptimeValue(values, uptimeKey) { var queryID = '.legend-item-' + values.component; var currentUptime = document.querySelector(queryID); if (currentUptime) { // Faster than setting innerHTML to "" then adding nodes var clone = currentUptime.cloneNode(false); var uptimeSpan = document.createElement('span'); uptimeSpan.id = 'uptime-percent-' + values.component uptimeSpan.innerText = values[uptimeKey] clone.appendChild(uptimeSpan); var appendText = document.createTextNode(' % uptime'); clone.appendChild(appendText); currentUptime.parentNode.replaceChild(clone, currentUptime); } } function setDayCount(el, dayCount) { // Faster than setting innerHTML to "" then adding nodes var clone = el.cloneNode(false); var dateSpan = document.createElement('span') dateSpan.className = "availability-time-line-legend-day-count" dateSpan.innerText= dayCount; clone.appendChild(dateSpan); var appendText = document.createTextNode(' days ago'); clone.appendChild(appendText); el.parentNode.replaceChild(clone, el); } function resizeSvgViewBoxes () { var width = window.innerWidth; var columnInfo = getKeyAndCount(width); var dayCount = columnInfo.dayCount, uptimeKey = columnInfo.uptimeKey; var newViewboxValue = calculateViewbox(dayCount, rectWidth, rectPadding); // If a user quickly resizes from < 450 to > 900 without stopping, // it will retain the same 30 day info as it wont have changed, but this only // impacts 30 day display as it is the only one with shortened text if (newViewboxValue !== svgs[0].getAttribute('viewBox')) { for (var i = 0; i < svgs.length; i++) { var el = svgs[i]; if (el.getAttribute('viewBox') !== newViewboxValue) { el.setAttribute('viewBox', newViewboxValue); } } var dayCountElements = document.querySelectorAll('.legend-item-date-range:first-of-type'); for (var i = 0; i < dayCountElements.length; i++) { setDayCount(dayCountElements[i], dayCount); } uptimeValues = [{"component":"kp4jnf6yvw5s","ninety":100.0,"sixty":100.0,"thirty":100.0},{"component":"cmny3b4lqf38","ninety":100.0,"sixty":100.0,"thirty":100.0},{"component":"3mqrrjdkm1l8","ninety":100.0,"sixty":100.0,"thirty":100.0},{"component":"s0x75157gnt4","ninety":100.0,"sixty":100.0,"thirty":100.0}]; for (var i = 0; i < uptimeValues.length; i++) { setUptimeValue(uptimeValues[i], uptimeKey) } const uptimeLinkVar = document.querySelector('.components-uptime-link > var') if (uptimeLinkVar) { uptimeLinkVar.innerHTML = dayCount; } } } window.addEventListener('resize', function () { clearTimeout(timeoutId); timeoutId = setTimeout(function () { resizeSvgViewBoxes(); }, delay); }); resizeSvgViewBoxes(); }); </script> <div id="uptime-tooltip"> <div class="pointer-container"> <div class="pointer-larger"></div> <div class="pointer-smaller"></div> </div> <div class="tooltip-box"> <div class="tooltip-content"> <div class="tooltip-close"> <i class="fa fa-times"></i> </div> <div class="date"></div> <div class="outages"> <div class="outage-field major"> <span class="label"> <i class="component-status page-colors text-color major_outage"></i> Major outage </span> <span class="value-hrs"></span> <span class="value-mins"></span> </div> <div class="outage-field partial"> <span class="label"> <i class="component-status page-colors text-color partial_outage"></i> Partial outage </span> <span class="value-hrs"></span> <span class="value-mins"></span> </div> <div class="no-outages-msg"> No downtime recorded on this day. </div> <div class="no-data-msg"> No data exists for this day. </div> <div id="major-outage-group-count" class="outage-count"> <i class="component-status page-colors text-color major_outage"></i> <span class="count"></span> had a major outage. </div> <div id="partial-outage-group-count" class="outage-count"> <i class="component-status page-colors text-color partial_outage"></i> <span class="count"></span> had a partial outage. </div> </div> <div class="related-events"> <h3 id="related-event-header">Related</h3> <ul id="related-events-list"></ul> </div> <div class="no-related-msg"> <p>No incidents or maintenance related to this downtime.</p> </div> </div> </div> </div> <script src="https://dka575ofm4ao0.cloudfront.net/assets/vendor/bowser-1643ca34a6d589b2d4d42163a891e4512d5d7657125e09bb5f3d44288114e6bd.js"></script> <script type="text/javascript"> /** This file contains the code needed to handle display of the uptime tooltips on status. Note: because it's in ERB, only ES5 syntax is allowed. */ var uptimeData = {"kp4jnf6yvw5s":{"component":{"code":"kp4jnf6yvw5s","name":"Gem Downloads"},"days":[{"date":"2024-08-30","outages":{},"related_events":[]},{"date":"2024-08-31","outages":{},"related_events":[]},{"date":"2024-09-01","outages":{},"related_events":[]},{"date":"2024-09-02","outages":{},"related_events":[]},{"date":"2024-09-03","outages":{},"related_events":[]},{"date":"2024-09-04","outages":{},"related_events":[]},{"date":"2024-09-05","outages":{},"related_events":[]},{"date":"2024-09-06","outages":{},"related_events":[]},{"date":"2024-09-07","outages":{},"related_events":[]},{"date":"2024-09-08","outages":{},"related_events":[]},{"date":"2024-09-09","outages":{},"related_events":[]},{"date":"2024-09-10","outages":{},"related_events":[]},{"date":"2024-09-11","outages":{},"related_events":[]},{"date":"2024-09-12","outages":{},"related_events":[]},{"date":"2024-09-13","outages":{},"related_events":[]},{"date":"2024-09-14","outages":{},"related_events":[]},{"date":"2024-09-15","outages":{},"related_events":[]},{"date":"2024-09-16","outages":{},"related_events":[]},{"date":"2024-09-17","outages":{},"related_events":[]},{"date":"2024-09-18","outages":{},"related_events":[]},{"date":"2024-09-19","outages":{},"related_events":[]},{"date":"2024-09-20","outages":{},"related_events":[]},{"date":"2024-09-21","outages":{},"related_events":[]},{"date":"2024-09-22","outages":{},"related_events":[]},{"date":"2024-09-23","outages":{},"related_events":[]},{"date":"2024-09-24","outages":{},"related_events":[]},{"date":"2024-09-25","outages":{},"related_events":[]},{"date":"2024-09-26","outages":{},"related_events":[]},{"date":"2024-09-27","outages":{},"related_events":[]},{"date":"2024-09-28","outages":{},"related_events":[]},{"date":"2024-09-29","outages":{},"related_events":[]},{"date":"2024-09-30","outages":{},"related_events":[]},{"date":"2024-10-01","outages":{},"related_events":[]},{"date":"2024-10-02","outages":{},"related_events":[]},{"date":"2024-10-03","outages":{},"related_events":[]},{"date":"2024-10-04","outages":{},"related_events":[]},{"date":"2024-10-05","outages":{},"related_events":[]},{"date":"2024-10-06","outages":{},"related_events":[]},{"date":"2024-10-07","outages":{},"related_events":[]},{"date":"2024-10-08","outages":{},"related_events":[]},{"date":"2024-10-09","outages":{},"related_events":[]},{"date":"2024-10-10","outages":{},"related_events":[]},{"date":"2024-10-11","outages":{},"related_events":[]},{"date":"2024-10-12","outages":{},"related_events":[]},{"date":"2024-10-13","outages":{},"related_events":[]},{"date":"2024-10-14","outages":{},"related_events":[]},{"date":"2024-10-15","outages":{},"related_events":[]},{"date":"2024-10-16","outages":{},"related_events":[]},{"date":"2024-10-17","outages":{},"related_events":[]},{"date":"2024-10-18","outages":{},"related_events":[]},{"date":"2024-10-19","outages":{},"related_events":[]},{"date":"2024-10-20","outages":{},"related_events":[]},{"date":"2024-10-21","outages":{},"related_events":[]},{"date":"2024-10-22","outages":{},"related_events":[]},{"date":"2024-10-23","outages":{},"related_events":[]},{"date":"2024-10-24","outages":{},"related_events":[]},{"date":"2024-10-25","outages":{},"related_events":[]},{"date":"2024-10-26","outages":{},"related_events":[]},{"date":"2024-10-27","outages":{},"related_events":[]},{"date":"2024-10-28","outages":{},"related_events":[]},{"date":"2024-10-29","outages":{},"related_events":[]},{"date":"2024-10-30","outages":{},"related_events":[]},{"date":"2024-10-31","outages":{},"related_events":[]},{"date":"2024-11-01","outages":{},"related_events":[]},{"date":"2024-11-02","outages":{},"related_events":[]},{"date":"2024-11-03","outages":{},"related_events":[]},{"date":"2024-11-04","outages":{},"related_events":[]},{"date":"2024-11-05","outages":{},"related_events":[]},{"date":"2024-11-06","outages":{},"related_events":[]},{"date":"2024-11-07","outages":{},"related_events":[]},{"date":"2024-11-08","outages":{},"related_events":[]},{"date":"2024-11-09","outages":{},"related_events":[]},{"date":"2024-11-10","outages":{},"related_events":[]},{"date":"2024-11-11","outages":{},"related_events":[]},{"date":"2024-11-12","outages":{},"related_events":[]},{"date":"2024-11-13","outages":{},"related_events":[]},{"date":"2024-11-14","outages":{},"related_events":[]},{"date":"2024-11-15","outages":{},"related_events":[]},{"date":"2024-11-16","outages":{},"related_events":[]},{"date":"2024-11-17","outages":{},"related_events":[]},{"date":"2024-11-18","outages":{},"related_events":[]},{"date":"2024-11-19","outages":{},"related_events":[]},{"date":"2024-11-20","outages":{},"related_events":[]},{"date":"2024-11-21","outages":{},"related_events":[]},{"date":"2024-11-22","outages":{},"related_events":[]},{"date":"2024-11-23","outages":{},"related_events":[]},{"date":"2024-11-24","outages":{},"related_events":[]},{"date":"2024-11-25","outages":{},"related_events":[]},{"date":"2024-11-26","outages":{},"related_events":[]},{"date":"2024-11-27","outages":{},"related_events":[]}]},"cmny3b4lqf38":{"component":{"code":"cmny3b4lqf38","name":"Application"},"days":[{"date":"2024-08-30","outages":{},"related_events":[]},{"date":"2024-08-31","outages":{},"related_events":[]},{"date":"2024-09-01","outages":{},"related_events":[]},{"date":"2024-09-02","outages":{},"related_events":[]},{"date":"2024-09-03","outages":{},"related_events":[]},{"date":"2024-09-04","outages":{},"related_events":[]},{"date":"2024-09-05","outages":{},"related_events":[]},{"date":"2024-09-06","outages":{},"related_events":[]},{"date":"2024-09-07","outages":{},"related_events":[]},{"date":"2024-09-08","outages":{},"related_events":[]},{"date":"2024-09-09","outages":{},"related_events":[]},{"date":"2024-09-10","outages":{},"related_events":[]},{"date":"2024-09-11","outages":{},"related_events":[]},{"date":"2024-09-12","outages":{},"related_events":[]},{"date":"2024-09-13","outages":{},"related_events":[]},{"date":"2024-09-14","outages":{},"related_events":[]},{"date":"2024-09-15","outages":{},"related_events":[]},{"date":"2024-09-16","outages":{},"related_events":[]},{"date":"2024-09-17","outages":{},"related_events":[]},{"date":"2024-09-18","outages":{},"related_events":[]},{"date":"2024-09-19","outages":{},"related_events":[]},{"date":"2024-09-20","outages":{},"related_events":[]},{"date":"2024-09-21","outages":{},"related_events":[]},{"date":"2024-09-22","outages":{},"related_events":[]},{"date":"2024-09-23","outages":{},"related_events":[]},{"date":"2024-09-24","outages":{},"related_events":[]},{"date":"2024-09-25","outages":{},"related_events":[]},{"date":"2024-09-26","outages":{},"related_events":[]},{"date":"2024-09-27","outages":{},"related_events":[]},{"date":"2024-09-28","outages":{},"related_events":[]},{"date":"2024-09-29","outages":{},"related_events":[]},{"date":"2024-09-30","outages":{},"related_events":[]},{"date":"2024-10-01","outages":{},"related_events":[]},{"date":"2024-10-02","outages":{},"related_events":[]},{"date":"2024-10-03","outages":{},"related_events":[]},{"date":"2024-10-04","outages":{},"related_events":[]},{"date":"2024-10-05","outages":{},"related_events":[]},{"date":"2024-10-06","outages":{},"related_events":[]},{"date":"2024-10-07","outages":{},"related_events":[]},{"date":"2024-10-08","outages":{},"related_events":[]},{"date":"2024-10-09","outages":{},"related_events":[]},{"date":"2024-10-10","outages":{},"related_events":[]},{"date":"2024-10-11","outages":{},"related_events":[]},{"date":"2024-10-12","outages":{},"related_events":[]},{"date":"2024-10-13","outages":{},"related_events":[]},{"date":"2024-10-14","outages":{},"related_events":[]},{"date":"2024-10-15","outages":{},"related_events":[]},{"date":"2024-10-16","outages":{},"related_events":[]},{"date":"2024-10-17","outages":{},"related_events":[]},{"date":"2024-10-18","outages":{},"related_events":[]},{"date":"2024-10-19","outages":{},"related_events":[]},{"date":"2024-10-20","outages":{},"related_events":[]},{"date":"2024-10-21","outages":{},"related_events":[]},{"date":"2024-10-22","outages":{},"related_events":[]},{"date":"2024-10-23","outages":{},"related_events":[]},{"date":"2024-10-24","outages":{},"related_events":[]},{"date":"2024-10-25","outages":{},"related_events":[]},{"date":"2024-10-26","outages":{},"related_events":[]},{"date":"2024-10-27","outages":{},"related_events":[]},{"date":"2024-10-28","outages":{},"related_events":[]},{"date":"2024-10-29","outages":{},"related_events":[]},{"date":"2024-10-30","outages":{},"related_events":[]},{"date":"2024-10-31","outages":{},"related_events":[]},{"date":"2024-11-01","outages":{},"related_events":[]},{"date":"2024-11-02","outages":{},"related_events":[]},{"date":"2024-11-03","outages":{},"related_events":[]},{"date":"2024-11-04","outages":{},"related_events":[]},{"date":"2024-11-05","outages":{},"related_events":[]},{"date":"2024-11-06","outages":{},"related_events":[]},{"date":"2024-11-07","outages":{},"related_events":[]},{"date":"2024-11-08","outages":{},"related_events":[]},{"date":"2024-11-09","outages":{},"related_events":[]},{"date":"2024-11-10","outages":{},"related_events":[]},{"date":"2024-11-11","outages":{},"related_events":[]},{"date":"2024-11-12","outages":{},"related_events":[]},{"date":"2024-11-13","outages":{},"related_events":[]},{"date":"2024-11-14","outages":{},"related_events":[]},{"date":"2024-11-15","outages":{},"related_events":[]},{"date":"2024-11-16","outages":{},"related_events":[]},{"date":"2024-11-17","outages":{},"related_events":[]},{"date":"2024-11-18","outages":{},"related_events":[]},{"date":"2024-11-19","outages":{},"related_events":[]},{"date":"2024-11-20","outages":{},"related_events":[]},{"date":"2024-11-21","outages":{},"related_events":[]},{"date":"2024-11-22","outages":{},"related_events":[]},{"date":"2024-11-23","outages":{},"related_events":[]},{"date":"2024-11-24","outages":{},"related_events":[]},{"date":"2024-11-25","outages":{},"related_events":[]},{"date":"2024-11-26","outages":{},"related_events":[]},{"date":"2024-11-27","outages":{},"related_events":[]}]},"3mqrrjdkm1l8":{"component":{"code":"3mqrrjdkm1l8","name":"Dependency API"},"days":[{"date":"2024-08-30","outages":{},"related_events":[]},{"date":"2024-08-31","outages":{},"related_events":[]},{"date":"2024-09-01","outages":{},"related_events":[]},{"date":"2024-09-02","outages":{},"related_events":[]},{"date":"2024-09-03","outages":{},"related_events":[]},{"date":"2024-09-04","outages":{},"related_events":[]},{"date":"2024-09-05","outages":{},"related_events":[]},{"date":"2024-09-06","outages":{},"related_events":[]},{"date":"2024-09-07","outages":{},"related_events":[]},{"date":"2024-09-08","outages":{},"related_events":[]},{"date":"2024-09-09","outages":{},"related_events":[]},{"date":"2024-09-10","outages":{},"related_events":[]},{"date":"2024-09-11","outages":{},"related_events":[]},{"date":"2024-09-12","outages":{},"related_events":[]},{"date":"2024-09-13","outages":{},"related_events":[]},{"date":"2024-09-14","outages":{},"related_events":[]},{"date":"2024-09-15","outages":{},"related_events":[]},{"date":"2024-09-16","outages":{},"related_events":[]},{"date":"2024-09-17","outages":{},"related_events":[]},{"date":"2024-09-18","outages":{},"related_events":[]},{"date":"2024-09-19","outages":{},"related_events":[]},{"date":"2024-09-20","outages":{},"related_events":[]},{"date":"2024-09-21","outages":{},"related_events":[]},{"date":"2024-09-22","outages":{},"related_events":[]},{"date":"2024-09-23","outages":{},"related_events":[]},{"date":"2024-09-24","outages":{},"related_events":[]},{"date":"2024-09-25","outages":{},"related_events":[]},{"date":"2024-09-26","outages":{},"related_events":[]},{"date":"2024-09-27","outages":{},"related_events":[]},{"date":"2024-09-28","outages":{},"related_events":[]},{"date":"2024-09-29","outages":{},"related_events":[]},{"date":"2024-09-30","outages":{},"related_events":[]},{"date":"2024-10-01","outages":{},"related_events":[]},{"date":"2024-10-02","outages":{},"related_events":[]},{"date":"2024-10-03","outages":{},"related_events":[]},{"date":"2024-10-04","outages":{},"related_events":[]},{"date":"2024-10-05","outages":{},"related_events":[]},{"date":"2024-10-06","outages":{},"related_events":[]},{"date":"2024-10-07","outages":{},"related_events":[]},{"date":"2024-10-08","outages":{},"related_events":[]},{"date":"2024-10-09","outages":{},"related_events":[]},{"date":"2024-10-10","outages":{},"related_events":[]},{"date":"2024-10-11","outages":{},"related_events":[]},{"date":"2024-10-12","outages":{},"related_events":[]},{"date":"2024-10-13","outages":{},"related_events":[]},{"date":"2024-10-14","outages":{},"related_events":[]},{"date":"2024-10-15","outages":{},"related_events":[]},{"date":"2024-10-16","outages":{},"related_events":[]},{"date":"2024-10-17","outages":{},"related_events":[]},{"date":"2024-10-18","outages":{},"related_events":[]},{"date":"2024-10-19","outages":{},"related_events":[]},{"date":"2024-10-20","outages":{},"related_events":[]},{"date":"2024-10-21","outages":{},"related_events":[]},{"date":"2024-10-22","outages":{},"related_events":[]},{"date":"2024-10-23","outages":{},"related_events":[]},{"date":"2024-10-24","outages":{},"related_events":[]},{"date":"2024-10-25","outages":{},"related_events":[]},{"date":"2024-10-26","outages":{},"related_events":[]},{"date":"2024-10-27","outages":{},"related_events":[]},{"date":"2024-10-28","outages":{},"related_events":[]},{"date":"2024-10-29","outages":{},"related_events":[]},{"date":"2024-10-30","outages":{},"related_events":[]},{"date":"2024-10-31","outages":{},"related_events":[]},{"date":"2024-11-01","outages":{},"related_events":[]},{"date":"2024-11-02","outages":{},"related_events":[]},{"date":"2024-11-03","outages":{},"related_events":[]},{"date":"2024-11-04","outages":{},"related_events":[]},{"date":"2024-11-05","outages":{},"related_events":[]},{"date":"2024-11-06","outages":{},"related_events":[]},{"date":"2024-11-07","outages":{},"related_events":[]},{"date":"2024-11-08","outages":{},"related_events":[]},{"date":"2024-11-09","outages":{},"related_events":[]},{"date":"2024-11-10","outages":{},"related_events":[]},{"date":"2024-11-11","outages":{},"related_events":[]},{"date":"2024-11-12","outages":{},"related_events":[]},{"date":"2024-11-13","outages":{},"related_events":[]},{"date":"2024-11-14","outages":{},"related_events":[]},{"date":"2024-11-15","outages":{},"related_events":[]},{"date":"2024-11-16","outages":{},"related_events":[]},{"date":"2024-11-17","outages":{},"related_events":[]},{"date":"2024-11-18","outages":{},"related_events":[]},{"date":"2024-11-19","outages":{},"related_events":[]},{"date":"2024-11-20","outages":{},"related_events":[]},{"date":"2024-11-21","outages":{},"related_events":[]},{"date":"2024-11-22","outages":{},"related_events":[]},{"date":"2024-11-23","outages":{},"related_events":[]},{"date":"2024-11-24","outages":{},"related_events":[]},{"date":"2024-11-25","outages":{},"related_events":[]},{"date":"2024-11-26","outages":{},"related_events":[]},{"date":"2024-11-27","outages":{},"related_events":[]}]},"s0x75157gnt4":{"component":{"code":"s0x75157gnt4","name":"Gem Index API"},"days":[{"date":"2024-08-30","outages":{},"related_events":[]},{"date":"2024-08-31","outages":{},"related_events":[]},{"date":"2024-09-01","outages":{},"related_events":[]},{"date":"2024-09-02","outages":{},"related_events":[]},{"date":"2024-09-03","outages":{},"related_events":[]},{"date":"2024-09-04","outages":{},"related_events":[]},{"date":"2024-09-05","outages":{},"related_events":[]},{"date":"2024-09-06","outages":{},"related_events":[]},{"date":"2024-09-07","outages":{},"related_events":[]},{"date":"2024-09-08","outages":{},"related_events":[]},{"date":"2024-09-09","outages":{},"related_events":[]},{"date":"2024-09-10","outages":{},"related_events":[]},{"date":"2024-09-11","outages":{},"related_events":[]},{"date":"2024-09-12","outages":{},"related_events":[]},{"date":"2024-09-13","outages":{},"related_events":[]},{"date":"2024-09-14","outages":{},"related_events":[]},{"date":"2024-09-15","outages":{},"related_events":[]},{"date":"2024-09-16","outages":{},"related_events":[]},{"date":"2024-09-17","outages":{},"related_events":[]},{"date":"2024-09-18","outages":{},"related_events":[]},{"date":"2024-09-19","outages":{},"related_events":[]},{"date":"2024-09-20","outages":{},"related_events":[]},{"date":"2024-09-21","outages":{},"related_events":[]},{"date":"2024-09-22","outages":{},"related_events":[]},{"date":"2024-09-23","outages":{},"related_events":[]},{"date":"2024-09-24","outages":{},"related_events":[]},{"date":"2024-09-25","outages":{},"related_events":[]},{"date":"2024-09-26","outages":{},"related_events":[]},{"date":"2024-09-27","outages":{},"related_events":[]},{"date":"2024-09-28","outages":{},"related_events":[]},{"date":"2024-09-29","outages":{},"related_events":[]},{"date":"2024-09-30","outages":{},"related_events":[]},{"date":"2024-10-01","outages":{},"related_events":[]},{"date":"2024-10-02","outages":{},"related_events":[]},{"date":"2024-10-03","outages":{},"related_events":[]},{"date":"2024-10-04","outages":{},"related_events":[]},{"date":"2024-10-05","outages":{},"related_events":[]},{"date":"2024-10-06","outages":{},"related_events":[]},{"date":"2024-10-07","outages":{},"related_events":[]},{"date":"2024-10-08","outages":{},"related_events":[]},{"date":"2024-10-09","outages":{},"related_events":[]},{"date":"2024-10-10","outages":{},"related_events":[]},{"date":"2024-10-11","outages":{},"related_events":[]},{"date":"2024-10-12","outages":{},"related_events":[]},{"date":"2024-10-13","outages":{},"related_events":[]},{"date":"2024-10-14","outages":{},"related_events":[]},{"date":"2024-10-15","outages":{},"related_events":[]},{"date":"2024-10-16","outages":{},"related_events":[]},{"date":"2024-10-17","outages":{},"related_events":[]},{"date":"2024-10-18","outages":{},"related_events":[]},{"date":"2024-10-19","outages":{},"related_events":[]},{"date":"2024-10-20","outages":{},"related_events":[]},{"date":"2024-10-21","outages":{},"related_events":[]},{"date":"2024-10-22","outages":{},"related_events":[]},{"date":"2024-10-23","outages":{},"related_events":[]},{"date":"2024-10-24","outages":{},"related_events":[]},{"date":"2024-10-25","outages":{},"related_events":[]},{"date":"2024-10-26","outages":{},"related_events":[]},{"date":"2024-10-27","outages":{},"related_events":[]},{"date":"2024-10-28","outages":{},"related_events":[]},{"date":"2024-10-29","outages":{},"related_events":[]},{"date":"2024-10-30","outages":{},"related_events":[]},{"date":"2024-10-31","outages":{},"related_events":[]},{"date":"2024-11-01","outages":{},"related_events":[]},{"date":"2024-11-02","outages":{},"related_events":[]},{"date":"2024-11-03","outages":{},"related_events":[]},{"date":"2024-11-04","outages":{},"related_events":[]},{"date":"2024-11-05","outages":{},"related_events":[]},{"date":"2024-11-06","outages":{},"related_events":[]},{"date":"2024-11-07","outages":{},"related_events":[]},{"date":"2024-11-08","outages":{},"related_events":[]},{"date":"2024-11-09","outages":{},"related_events":[]},{"date":"2024-11-10","outages":{},"related_events":[]},{"date":"2024-11-11","outages":{},"related_events":[]},{"date":"2024-11-12","outages":{},"related_events":[]},{"date":"2024-11-13","outages":{},"related_events":[]},{"date":"2024-11-14","outages":{},"related_events":[]},{"date":"2024-11-15","outages":{},"related_events":[]},{"date":"2024-11-16","outages":{},"related_events":[]},{"date":"2024-11-17","outages":{},"related_events":[]},{"date":"2024-11-18","outages":{},"related_events":[]},{"date":"2024-11-19","outages":{},"related_events":[]},{"date":"2024-11-20","outages":{},"related_events":[]},{"date":"2024-11-21","outages":{},"related_events":[]},{"date":"2024-11-22","outages":{},"related_events":[]},{"date":"2024-11-23","outages":{},"related_events":[]},{"date":"2024-11-24","outages":{},"related_events":[]},{"date":"2024-11-25","outages":{},"related_events":[]},{"date":"2024-11-26","outages":{},"related_events":[]},{"date":"2024-11-27","outages":{},"related_events":[]}]}} var timeoutId; var monthStrings = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]; var EVENT_MAX_LENGTH = 90; // Detect device (desktop vs. touch device) function touchDevice() { var browser = bowser.getParser(window.navigator.userAgent); // if type is either mobile or tablet, return true return browser.parse().parsedResult.platform.type !== 'desktop'; } // Class is in format day-<number>. Convert to just number function dayNumberFromClass(className) { return parseInt(className.split('-')[1]); } // Class is in format component-<code>. Convert to just code function componentCodeFromClass(className) { return className.split('-')[1]; } // Convert number to string pixel measurement function intToPixels(number) { return number.toString() + 'px'; } function truncate(str) { return str.substring(0, EVENT_MAX_LENGTH) + (str.length > EVENT_MAX_LENGTH ? '...' : ''); } // Tooltip Handling class constructor function UptimeTooltipHandler(frameWidth) { this.visible = false; this.activeDay = { hovered: false }; this.tooltip = document.getElementById('uptime-tooltip'); this.frameWidth = frameWidth === undefined ? window.innerWidth : frameWidth; this.scrolling = false; window.addEventListener('mousemove', this.tooltipListener.bind(this)); window.addEventListener('orientationchange', this.orientationListener.bind(this)); // on tooltip creation, determine whether to display touch-specific controls var tooltipCloseButton = document.querySelector('.tooltip-close'); if (touchDevice()) { var componentsContainer = document.querySelector('.components-container'); componentsContainer.addEventListener('touchstart', this.handleTouch.bind(this)); tooltipCloseButton.addEventListener('touchstart', this.unhoverTooltip.bind(this)); } else { window.addEventListener('resize', this.resizeListener.bind(this)); // classList not supported by IE < 9 tooltipCloseButton.className += ' hidden'; } // Handle toggle of group elements var groupComponents = document.querySelectorAll('[data-js-hook=component-group-opener]'); for (var i = 0; i < groupComponents.length; i++) { groupComponents[i].addEventListener('click', this.hideTooltip.bind(this)); } var tooltipBox = document.querySelector('#uptime-tooltip .tooltip-box'); tooltipBox.addEventListener('mouseenter', this.mouseEnteredTooltip.bind(this)); tooltipBox.addEventListener('mouseleave', this.unhoverTooltip.bind(this)); } document.querySelectorAll('.uptime-day').forEach(function (rect) { rect.addEventListener('focus', function (event) { var tooltipHandler = new UptimeTooltipHandler(); tooltipHandler.updateHoveredDay(event); tooltipHandler.updateTooltip(event); }); rect.addEventListener('blur', function () { var tooltipHandler = new UptimeTooltipHandler(); tooltipHandler.unhoverTooltip(); }); rect.addEventListener('keydown', function (event) { if (event.key === 'Escape' || event.keyCode === 27) { var tooltipHandler = new UptimeTooltipHandler(); tooltipHandler.unhoverTooltip(); } }); }); UptimeTooltipHandler.prototype.tooltipListener = function(event) { if (!this.tooltipHovered) { this.updateHoveredDay(event); this.updateTooltip(event); } } // this handler will accommodate for mobile orientation change UptimeTooltipHandler.prototype.orientationListener = function(event) { // just close the tooltip this.unhoverTooltip(); } UptimeTooltipHandler.prototype.resizeListener = function(event) { this.frameWidth = window.innerWidth; } UptimeTooltipHandler.prototype.handleTouch = function (event) { if (event.target.classList.contains('uptime-day')) { event.stopPropagation(); this.bladeTouched(event); } } UptimeTooltipHandler.prototype.mouseEnteredTooltip = function() { // Necessary to clear the timeout set for closing the tooltip when the mouse // moves off the blade or timeline, so the tooltip isnt closed on hover clearTimeout(timeoutId); // Sets it to null so the timeout can be set later, as clearTimeout only // cancels the timer, and we need to allow it to be reset in the mouse // move handler below timeoutId = null; this.tooltipHovered = true; } UptimeTooltipHandler.prototype.unhoverTooltip = function() { this.tooltipHovered = false; this.activeDay.hovered = false; this.hideTooltip(); } UptimeTooltipHandler.prototype.bladeTouched = function (event) { event.preventDefault(); var classes = event.target.getAttribute('class').split(' '); var componentCode = componentCodeFromClass(classes[1]) var index = dayNumberFromClass(classes[2]); // If open and tapped on same component and day, close tooltip if (this.visible && this.activeDay.component === componentCode && this.activeDay.index === index) { this.hideTooltip(); } else { this.updateHoveredDay(event); this.updateTooltip(event); } } UptimeTooltipHandler.prototype.updateHoveredDay = function(event) { var classes = event.target.getAttribute('class'); // classList doesn't work in IE var onDay = classes != null && classes.split(' ').indexOf('uptime-day') !== -1; if (onDay) { classes = classes.split(' '); var componentCode = componentCodeFromClass(classes[1]); this.activeDay = { index: dayNumberFromClass(classes[2]), component: componentCode, bounds: event.target.getBoundingClientRect(), isGroup: uptimeData[componentCode].component.isGroup, hovered: true } } else { this.activeDay.hovered = false; } } UptimeTooltipHandler.prototype.updateTooltip = function(event) { var classes = event.target.getAttribute('class'); // classList doesn't work in IE var hoveredOnGraphic = classes != null && classes.split(' ').indexOf('availability-time-line-graphic') !== -1; if (this.activeDay.hovered) { this.updateTooltipData(); this.positionTooltip(); } else if (this.visible && !this.activeDay.hovered && !hoveredOnGraphic) { // Important: since this is on mouse move it will be called multiple times // which will clear timeoutId and reset it to the new value, meaning // it is a race condition to cancel it if (!timeoutId) { var _this = this; timeoutId = setTimeout(function() { _this.hideTooltip(); timeoutId = null; }, 250); } } } UptimeTooltipHandler.prototype.updateTooltipData = function() { // Get the data for the day we're hovered on var day = uptimeData[this.activeDay.component].days[this.activeDay.index]; // Update the date for the tooltip var date = new Date(day.date); // Get the component's start date. Note that it will be undefined here unless it is populated in our database var startDay = uptimeData[this.activeDay.component].component.startDate; var startDate = startDay ? new Date(startDay) : null; // Determine whether current date falls before component's start date. var beforeStartDate = startDate ? date.getTime() < startDate.getTime() : false; // UTC necessary since days are passed yyyy-mm-dd, and new Date uses midnight UTC, so local times // are presented as the day before var dateString = date.getUTCDate() + " " + monthStrings[date.getUTCMonth()] + " " + date.getUTCFullYear(); document.querySelector('#uptime-tooltip .date').innerHTML = dateString; // Update the outage fields if (this.activeDay.isGroup) { this.updateGroupOutageFields() } else { this.updateOutageFields(day.outages.p, day.outages.m, day.related_events, beforeStartDate); } } UptimeTooltipHandler.prototype.hoursFromSeconds = function(s) { return Math.floor(s / 3600); } UptimeTooltipHandler.prototype.minutesFromSeconds = function(s) { // If less than a minute, round up to 1 minute to show that some outage existed if (s > 0 && s < 60) { return 1; } // Otherwise use floor return Math.floor((s % 3600) / 60); } UptimeTooltipHandler.prototype.updateGroupOutageFields = function() { // Hide time info document.querySelector('#uptime-tooltip .outage-field.major').style.display = 'none'; document.querySelector('#uptime-tooltip .outage-field.partial').style.display = 'none'; document.querySelector(".related-events h3").style.display = 'none'; document.querySelector('.no-related-msg').style.display = 'none'; var eventList = document.getElementById("related-events-list") var cloneList = eventList.cloneNode(false); eventList.parentNode.replaceChild(cloneList, eventList); var partialCount = 0; var majorCount = 0; /** We were originally using the operationalCount as part of the no outage copy for group components, but ultimately decided not to use it. I opted to leave the variable in place in case we ever decide to use it in the future. */ var operationalCount = 0; var noDataCount = 0; var showcasedComponentsCount = 0; var components = uptimeData[this.activeDay.component].component.group for (var i = 0; i < components.length; i++) { if (!uptimeData[components[i]]) continue; showcasedComponentsCount++; var outages = uptimeData[components[i]].days[this.activeDay.index].outages; var currentDay = uptimeData[components[i]].days[this.activeDay.index]; var currentDate = new Date(currentDay.date); // Get the component's start date. Note that it will be undefined here unless it is populated in our database var startDay = uptimeData[components[i]].component.startDate; var startDate = startDay ? new Date(startDay) : null; if (outages.p) { partialCount += 1; } if (outages.m) { majorCount += 1; } // Only increase operational count if component has data for this day if (!outages.p && !outages.m) { if (startDate && currentDate.getTime() < startDate.getTime()) { noDataCount +=1; } else { operationalCount +=1; } } } document.querySelector('#major-outage-group-count').style.display = majorCount ? 'block' : 'none'; document.querySelector('#partial-outage-group-count').style.display = partialCount ? 'block' : 'none'; document.querySelector('#major-outage-group-count .count').innerText = majorCount + (majorCount === 1 ? " component" : " components"); document.querySelector('#partial-outage-group-count .count').innerText = partialCount + (partialCount === 1 ? " component" : " components "); // Show no data message only if we do not have data for any showcased components in the group var showNoDataMessage = noDataCount === showcasedComponentsCount; // Show no outages message if we have data for the components and no outages in that data document.querySelector('#uptime-tooltip .no-outages-msg').style.display = (majorCount || partialCount || showNoDataMessage) ? 'none' : 'block'; document.querySelector('#uptime-tooltip .no-data-msg').style.display = showNoDataMessage ? 'block' : 'none'; } UptimeTooltipHandler.prototype.updateOutageFields = function(partial, major, relatedEvents, beforeStartDate) { // Hide group info document.querySelector('#major-outage-group-count').style.display = 'none'; document.querySelector('#partial-outage-group-count').style.display = 'none'; // Show the message that no outage present, if none is present if (partial || major || beforeStartDate) { document.querySelector('#uptime-tooltip .no-outages-msg').style.display = 'none'; } else { document.querySelector('#uptime-tooltip .no-outages-msg').style.display = 'block'; } if (beforeStartDate) { document.querySelector('#uptime-tooltip .no-data-msg').style.display = 'block'; } else { document.querySelector('#uptime-tooltip .no-data-msg').style.display = 'none'; } // Update partial outage field if an outage exists, otherwise hide it if (partial) { var hrs = this.hoursFromSeconds(partial); var mins = this.minutesFromSeconds(partial); document.querySelector('#uptime-tooltip .outage-field.partial .value-hrs').innerHTML = hrs.toString() + ' hrs'; document.querySelector('#uptime-tooltip .outage-field.partial .value-mins').innerHTML = mins.toString() + ' mins'; document.querySelector('#uptime-tooltip .outage-field.partial').style.display = 'flex'; } else { document.querySelector('#uptime-tooltip .outage-field.partial').style.display = 'none'; } // Update major outage field if an outage exists, otherwise hide it if (major) { var hrs = this.hoursFromSeconds(major); var mins = this.minutesFromSeconds(major); document.querySelector('#uptime-tooltip .outage-field.major .value-hrs').innerHTML = hrs.toString() + ' hrs'; document.querySelector('#uptime-tooltip .outage-field.major .value-mins').innerHTML = mins.toString() + ' mins'; document.querySelector('#uptime-tooltip .outage-field.major').style.display = 'flex'; } else { document.querySelector('#uptime-tooltip .outage-field.major').style.display = 'none'; } var eventList = document.getElementById("related-events-list") var cloneList = eventList.cloneNode(false); document.querySelector(".related-events h3").style.display = (relatedEvents.length ? 'block' : 'none'); for (var i = 0; i < relatedEvents.length; i++) { var listItem = document.createElement("li"); listItem.className = "related-event"; var anchor = document.createElement("a"); anchor.className = "related-event-link"; anchor.target = "_blank"; anchor.href = window.Routes.incident_path(relatedEvents[i].code); var text = document.createTextNode(truncate(relatedEvents[i].name)); anchor.appendChild(text); listItem.appendChild(anchor); cloneList.appendChild(listItem); } const displayNoRelatedMsg = ((major || partial) && !relatedEvents.length); document.querySelector('.no-related-msg').style.display = (displayNoRelatedMsg ? 'block' : 'none'); eventList.parentNode.replaceChild(cloneList, eventList); } UptimeTooltipHandler.prototype.positionTooltip = function() { this.calculatePointerCenter(); this.calculateBoxPosition(); // show tooltip this.tooltip.style.display = 'block'; // position pointer var pointer = this.tooltip.getElementsByClassName('pointer-container')[0]; pointer.style.left = intToPixels(this.pointerCenter.x - 8); pointer.style.top = intToPixels(this.pointerCenter.y - 5); // position display box var box = this.tooltip.getElementsByClassName('tooltip-box')[0]; box.style.left = intToPixels(this.boxLeft); box.style.top = intToPixels(this.pointerCenter.y + 5); this.visible = true; } UptimeTooltipHandler.prototype.calculatePointerCenter = function() { var bounds = this.activeDay.bounds; var rectLeft = bounds.left + window.pageXOffset; var rectBottom = bounds.bottom + window.pageYOffset; var rectWidth = bounds.right - bounds.left; this.pointerCenter = { x: rectLeft + Math.floor(rectWidth / 2), y: rectBottom + 5 } } UptimeTooltipHandler.prototype.calculateBoxPosition = function() { var sideWidth = 162.5; if (this.pointerCenter.x - sideWidth < 0) { this.boxLeft = 0; } else if (this.pointerCenter.x + sideWidth > this.frameWidth) { this.boxLeft = this.frameWidth - sideWidth * 2; } else { this.boxLeft = this.pointerCenter.x - sideWidth; } } UptimeTooltipHandler.prototype.hideTooltip = function() { this.tooltip.style.display = 'none'; this.visible = false; } new UptimeTooltipHandler(); </script> <div class="incidents-list format-expanded"> <a class="font-largest no-link" id="past-incidents" href="#past-incidents">Past Incidents</a> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">27</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported today.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">26</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">25</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">24</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">23</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">22</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">21</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">20</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">19</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">18</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">17</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">16</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">15</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">14</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">13</var>, <var data-var="year">2024</var></div> <p class="color-secondary">No incidents reported.</p> </div> </div> <div class="page-footer border-color font-small"> <a href="/history" class="history-footer-link"><span style="font-family:arial">←</span> Incident History</a> <span class="color-secondary powered-by"><a class="color-secondary" target="_blank" rel="noopener noreferrer nofollow" href="https://www.atlassian.com/software/statuspage?utm_campaign=status.rubygems.org&utm_content=SP-notifications&utm_medium=powered-by&utm_source=inapp">Powered by Atlassian Statuspage</a></span> </div> </div> </div> <script src="https://dka575ofm4ao0.cloudfront.net/assets/status_manifest-6a7ae3a8e2e1b1e1d9466495faa0851c3f5fff938743f6501c900aa2a8792e8c.js"></script> <div id="cpt-notification-container"></div> <!-- all of the content_for stuff --> <script src="https://dka575ofm4ao0.cloudfront.net/assets/register_subscription_form-589b657fec607087fc5c740c568270907310bc4f6aaa20256e70f01b103025ca.js"></script> <script type="text/javascript"> </script> <script src="https://dka575ofm4ao0.cloudfront.net/assets/status_common-c1b99d73ee7ab0fea796bd170723c1daac1381095a7dd7501a38ce6f333d86b3.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 won't 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> /** INITIALIZATION **/ var recaptchaIds = {} // Unfortunately there's 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 it'll render above our modals & dropdowns from the start. function setZIndex(captchaCount, startTime) { // bail after 10s just in case so we don't do this forever if something whaky happens if (new Date() - startTime > 10000) { return; } var iframes = document.querySelectorAll('iframe[title="recaptcha 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 iframes[i].parentElement.parentElement.style.zIndex = "1100"; } } function updateCaptchaIframeTitle(captchaCount, startTime, updates=0) { if (new Date() - startTime > 10000 || captchaCount === updates) { return; } var iframesWithTitle = document.querySelectorAll('iframe[title="recaptcha 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++) { iframesWithTitle[i].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 = captchas[i].id; recaptchaIds[elId] = 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(recaptchaIds['subscribe-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('input[name="captcha_error"]').value = error; incidentForm.querySelector('input[name="g-recaptcha-response"]').value = token; incidentForm.dispatchEvent(new Event('submit', {bubbles: true, cancelable: true})); grecaptcha.enterprise.reset(recaptchaIds['subscribe-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(recaptchaIds['subscribe-incident-recaptcha']); } </script> <script src='https://www.recaptcha.net/recaptcha/enterprise.js?onload=onloadCallback&render=explicit' async defer></script> <script src="https://dka575ofm4ao0.cloudfront.net/packs/common-814024cd42fea12d6fe1.chunk.js"></script> <script src="https://dka575ofm4ao0.cloudfront.net/packs/globals-0c851e8c6754c4375f64.chunk.js"></script> <script src="https://dka575ofm4ao0.cloudfront.net/packs/runtime-8a1984f6547cb712c8d9.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鈥檛 supported in direct messages. Try subscribing again and choose a channel instead.', {cssClass:'error'}); break case 'duplicate_error': HRB.utils.notify("You're already subscribed to get Slack notifications in that channel.", {cssClass:'error'}); break; case 'duplicate_private_channel_error': HRB.utils.notify(`You're 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("You're 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 class="color-secondary powered-by"><a class="color-secondary" target="_blank" rel="noopener noreferrer nofollow" href="https://www.atlassian.com/software/statuspage?utm_campaign=status.rubygems.org&utm_content=SP-notifications&utm_medium=powered-by&utm_source=inapp">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>