CINXE.COM

Python Infrastructure 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>Python Infrastructure Status</title> <meta name="description" content="Welcome to Python Infrastructure&#39;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="1732409918"> <!-- 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.python.org'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-f0b2f7c12b6b87c65c02d3c1738047ea67a7607fd767056d8a2964cc6a2393f7.eot?host=status.python.org#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-e642ffe82005c6208632538a557e7f5dccb835c0303b06f17f55ccf567907241.woff?host=status.python.org') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-0f094da9b301d03292f97db5544142a16f9f2ddf50af91d44753d9310c194c5f.ttf?host=status.python.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.python.org'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-366d17769d864aa72f27defaddf591e460a1de4984bb24dacea57a9fc1d14878.eot?host=status.python.org#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-2ee4c449a9ed716f1d88207bd1094e21b69e2818b5cd36b28ad809dc1924ec54.woff?host=status.python.org') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-a40a469edbd27b65b845b8000d47445a17def8ba677f4eb836ad1808f7495173.ttf?host=status.python.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.python.org'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-0bf83a850b45e4ccda15bd04691e3c47ae84fec3588363b53618bd275a98cbb7.eot?host=status.python.org#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-0c394ec7a111aa7928ea470ec0a67c44ebdaa0f93d1c3341abb69656cc26cbdd.woff?host=status.python.org') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-9e43859f8015a4d47d9eaf7bafe8d1e26e3298795ce1f4cdb0be0479b8a4605e.ttf?host=status.python.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.python.org'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaSemibold-09566917307251d22021a3f91fc646f3e45f8d095209bcd2cded8a1979f06e54.eot?host=status.python.org#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaSemibold-86724fb2152613d735ba47c3f47a9ad2424b898bea4bece213dacee40344f966.woff?host=status.python.org') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaSemibold-cf3e4eb7fbdf6fb83e526cc2a0141e55b01097e6e1abfd4cbdc3eda75d183f74.ttf?host=status.python.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.python.org'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaBold-622ea489d20e12e691663f83217105e957e2d3d09703707d40155a29c06cc9d9.eot?host=status.python.org#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaBold-c8dc577ff7f76d2fc199843e38c04bb2e9fd15889421358d966a9f846c2ed1cd.woff?host=status.python.org') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaBold-27177fe9242acbe089276ee587feef781446667ffe9b6fdc5b7fe21ad73e12f3.ttf?host=status.python.org') format('truetype'); font-weight:700; font-style:normal; } </style> <link rel="apple-touch-icon" href="https://dka575ofm4ao0.cloudfront.net/assets/base/apple-touch-icon-57x57-precomposed-5c491f48c00b91d5cf8b0839521a13b98ba3cd2167c5e0e53040ccf401227556.png" sizes="57x57"> <link rel="apple-touch-icon" href="https://dka575ofm4ao0.cloudfront.net/assets/base/apple-touch-icon-72x72-precomposed-94327076268b47cc7da838952f5e89a5ed9dcdde2734db231491e328d23e9962.png" sizes="72x72"> <link rel="apple-touch-icon" href="https://dka575ofm4ao0.cloudfront.net/assets/base/apple-touch-icon-114x114-precomposed-1e9664e05d1a3dc5cd67ee3b3c17215526a04a3b0a2e018bd26c5fa73482392f.png" sizes="114x114"> <link rel="apple-touch-icon" href="https://dka575ofm4ao0.cloudfront.net/assets/base/apple-touch-icon-120x120-precomposed-5d71ac87ecfc852fef52505af1eade3674709a530e7ed2ddb3ff44ab62db52f7.png" sizes="120x120"> <link rel="apple-touch-icon" href="https://dka575ofm4ao0.cloudfront.net/assets/base/apple-touch-icon-144x144-precomposed-f140e6b87ce676b2388742ebce8292476ba938f73a49c4c15e86565a224bb93d.png" sizes="144x144"> <link rel="apple-touch-icon" href="https://dka575ofm4ao0.cloudfront.net/assets/base/apple-touch-icon-152x152-precomposed-38fe2c387837f45dfab255be5670c7b3aad29cf6dbc5b8e4cdce30f61259b9ce.png" sizes="152x152"> <link rel="apple-touch-icon" href="https://dka575ofm4ao0.cloudfront.net/assets/base/apple-touch-icon-167x167-precomposed-b776218c8fb96a430158776d0749c2f81143c94f40c4427e53e32e4c786c87c0.png" sizes="167x167"> <link rel="apple-touch-icon" href="https://dka575ofm4ao0.cloudfront.net/assets/base/apple-touch-icon-180x180-precomposed-8819023509ff72c1f8945709243c9bab8b40c9bac0eb7891ad75b36600c7c7f9.png" sizes="180x180"> <link rel="shortcut icon" href='https://dka575ofm4ao0.cloudfront.net/assets/logos/favicon-2b86ed00cfa6258307d4a3d0c482fd733c7973f82de213143b24fc062c540367.png'> <link rel="alternate" type="application/atom+xml" href="https://status.python.org/history.atom" title="Python Infrastructure Status History - Atom Feed"> <link rel="alternate" type="application/rss+xml" href="https://status.python.org/history.rss" title="Python Infrastructure Status History - RSS Feed"> <!-- Canonical Link to ensure that only the custom domain is indexed when present --> <link rel="canonical" href="https://status.python.org"> <meta name="_globalsign-domain-verification" content="y_VzfckMy4iePo5oDJNivyYIjh8LffYa4jzUndm_bZ"/> <link rel="alternate" type="application/atom+xml" title="ATOM" href="https://status.python.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":"#ffffff","font":"#333333","graph":"#3498db","green":"#2fcc66","light_font":"#AAAAAA","link":"#3498db","orange":"#e67e22","red":"#e74c3c","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:#ffffff; } #uptime-tooltip .pointer-container .pointer-smaller { border-bottom-color:#ffffff; } /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ body.status, .color-primary, .color-primary:hover, .layout-content.status-index .status-day .update-title.impact-none a, .layout-content.status-index .status-day .update-title.impact-none a:hover, .layout-content.status-index .timeframes-container .timeframe.active, .layout-content.status-full-history .month .incident-container .impact-none, .layout-content.status.status-index .incidents-list .incident-title.impact-none a, .incident-history .impact-none, .layout-content.status .grouped-items-selector.inline .grouped-item.active, .layout-content.status.status-full-history .history-nav a.current, .layout-content.status.status-full-history .history-nav a:not(.current):hover, 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:#e74c3c; } .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:#e74c3c; } .layout-content.status.status-index .unresolved-incident.impact-critical .updates { border-color:#e74c3c; } /* 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:#2fcc66; } .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:#2fcc66; } /* 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:#3498db; } .flat-button, .masthead .updates-dropdown-container .show-updates-dropdown, .layout-content.status-full-history .show-filter.open { background-color:#3498db; } /* 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 --> <!-- 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-none"> <div class="layout-content status status-index premium"> <div class="masthead-container premium"> <div class="masthead"> <div class="images-container" id="cover-image-container" data-js-hook="images-container"></div> <style> #cover-image-container { background-image:url("//dka575ofm4ao0.cloudfront.net/pages-hero_covers/normal/407/open-uri20130626-9596-14zd1yg"); } @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi) { #cover-image-container { background-image:url("//dka575ofm4ao0.cloudfront.net/pages-hero_covers/retina/407/open-uri20130626-9596-14zd1yg") !important; } } </style> <div class="text-container"> <span class="page-name font-largest"> <a target="_blank" href="https://www.python.org">Python Infrastructure</a> </span> <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-7" role="tablist" aria-label="Subscribe to updates"> <a href="#updates-dropdown-email" aria-controls="updates-dropdown-email" aria-label="Subscribe via email" role="tab" aria-selected="true" id="updates-dropdown-email-btn"> <span class="icon-container email"> </a> <a href="#updates-dropdown-sms" aria-controls="updates-dropdown-sms" aria-label="Subscribe via SMS" role="tab" id="updates-dropdown-sms-btn"> <span class="icon-container sms"> </a> <a href="#updates-dropdown-slack" aria-controls="updates-dropdown-slack" aria-label="Subscribe via slack" role="tab" id="updates-dropdown-slack-btn"> <span class="icon-container slack"> </a> <a href="#updates-dropdown-webhook" aria-controls="updates-dropdown-webhook" aria-label="Subscribe via webhook" role="tab" id="updates-dropdown-webhook-btn"> <span class="icon-container webhook"> </a> <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-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 email" id="updates-dropdown-email" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-email-btn"> <div class="directions"> Get email notifications whenever Python Infrastructure <strong>creates</strong>, <strong>updates</strong> or <strong>resolves</strong> an incident. </div> <form id="subscribe-form-email" action="/subscriptions/new-email" accept-charset="UTF-8" data-remote="true" method="post"> <input type="hidden" name="email_otp_verify_flow" id="email_otp_verify_flow" value="false" autocomplete="off" /> <!-- make sure not to put cookie values in here since this gets cached --> <label for="email">Email address:</label> <input name="email" id="email" type="text" class="full-width" data-js-hook="email-notification-field" autocomplete="email"> <input name="email_otp_auth_token" type='hidden' id="email-otp-token-field"> <div class="opt-container-section" id="email-otp-container", style="display:none" > <label for="email-otp">Enter OTP:</label> <input name="otp" id="email-otp" type="text" value="" class="prepend full-width"> <p id="email-otp-timer">Resend OTP in: <span id="email-otp-countdown"></span> seconds </p> <p id="resend-email-otp"> Didn't receive the OTP? <a href="#" id="resend-email-otp-btn" >Resend OTP </a> </p> </div> <input type="hidden" name="captcha_error" id="captcha_error" value="false" autocomplete="off" /> <input type="submit" value="Subscribe via Email" class="flat-button full-width g-recaptcha" id="subscribe-btn-email" data-disabled-text="Subscribing..." data-sitekey=6LdTS8AUAAAAAOIbCKoCAP4LQku1olYGrywPTaZz data-callback="submitNewEmailSubscriber" data-error-callback="emailSubscriberCaptchaError" > <div class="terms_and_privacy_information bottom small"><div class="privacy_policy_information small">By subscribing you agree to our <a target="_blank" rel="noopener" href="https://www.python.org/privacy/">Privacy Policy</a>.</div> This site is protected by reCAPTCHA and the Google <a target="_blank" rel="noopener" href="https://policies.google.com/privacy">Privacy Policy</a> and <a target="_blank" rel="noopener" data-js-hook="captcha-terms-of-service-link" href="https://policies.google.com/terms">Terms of Service</a> apply.</div> </form> </div> <div class="updates-dropdown-section phone" id="updates-dropdown-sms" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-sms-btn"> <div class="directions"> Get text message notifications whenever Python Infrastructure <strong>creates</strong> or <strong>resolves</strong> an incident. </div> <form id="subscribe-form-sms" action="/subscriptions/new-sms" accept-charset="UTF-8" data-remote="true" method="post"> <input type="hidden" name="otp_verify_flow" id="otp_verify_flow" value="false" autocomplete="off" /> <input type="hidden" name="subscriber_code" id="subscriber_code" value="" autocomplete="off" /> <div class="control-group"> <div class="controls externalities-sms-container"> <!-- make sure not to put cookie values in here since this gets cached --> <label for="phone-country">Country code:</label> <div id="phone-number-country-code" class="phone-country-wrapper" data-otp-enabled="false"> <select name="phone_country" id="phone-country" data-js-hook="phone-country" class="phone-country"><option value="af" data-otp-enabled="false" >Afghanistan (+93)</option> <option value="al" data-otp-enabled="false" >Albania (+355)</option> <option value="dz" data-otp-enabled="false" >Algeria (+213)</option> <option value="as" data-otp-enabled="false" >American Samoa (+1)</option> <option value="ad" data-otp-enabled="false" >Andorra (+376)</option> <option value="ao" data-otp-enabled="false" >Angola (+244)</option> <option value="ai" data-otp-enabled="false" >Anguilla (+1)</option> <option value="ag" data-otp-enabled="false" >Antigua and Barbuda (+1)</option> <option value="ar" data-otp-enabled="false" >Argentina (+54)</option> <option value="am" data-otp-enabled="false" >Armenia (+374)</option> <option value="aw" data-otp-enabled="false" >Aruba (+297)</option> <option value="au" data-otp-enabled="false" >Australia/Cocos/Christmas Island (+61)</option> <option value="at" data-otp-enabled="false" >Austria (+43)</option> <option value="az" data-otp-enabled="false" >Azerbaijan (+994)</option> <option value="bs" data-otp-enabled="false" >Bahamas (+1)</option> <option value="bh" data-otp-enabled="false" >Bahrain (+973)</option> <option value="bd" data-otp-enabled="false" >Bangladesh (+880)</option> <option value="bb" data-otp-enabled="false" >Barbados (+1)</option> <option value="by" data-otp-enabled="false" >Belarus (+375)</option> <option value="be" data-otp-enabled="false" >Belgium (+32)</option> <option value="bz" data-otp-enabled="false" >Belize (+501)</option> <option value="bj" data-otp-enabled="false" >Benin (+229)</option> <option value="bm" data-otp-enabled="false" >Bermuda (+1)</option> <option value="bo" data-otp-enabled="false" >Bolivia (+591)</option> <option value="ba" data-otp-enabled="false" >Bosnia and Herzegovina (+387)</option> <option value="bw" data-otp-enabled="false" >Botswana (+267)</option> <option value="br" data-otp-enabled="false" >Brazil (+55)</option> <option value="bn" data-otp-enabled="false" >Brunei (+673)</option> <option value="bg" data-otp-enabled="false" >Bulgaria (+359)</option> <option value="bf" data-otp-enabled="false" >Burkina Faso (+226)</option> <option value="bi" data-otp-enabled="false" >Burundi (+257)</option> <option value="kh" data-otp-enabled="false" >Cambodia (+855)</option> <option value="cm" data-otp-enabled="false" >Cameroon (+237)</option> <option value="ca" data-otp-enabled="false" >Canada (+1)</option> <option value="cv" data-otp-enabled="false" >Cape Verde (+238)</option> <option value="ky" data-otp-enabled="false" >Cayman Islands (+1)</option> <option value="cf" data-otp-enabled="false" >Central Africa (+236)</option> <option value="td" data-otp-enabled="false" >Chad (+235)</option> <option value="cl" data-otp-enabled="false" >Chile (+56)</option> <option value="cn" data-otp-enabled="false" >China (+86)</option> <option value="co" data-otp-enabled="false" >Colombia (+57)</option> <option value="km" data-otp-enabled="false" >Comoros (+269)</option> <option value="cg" data-otp-enabled="false" >Congo (+242)</option> <option value="cd" data-otp-enabled="false" >Congo, Dem Rep (+243)</option> <option value="cr" data-otp-enabled="false" >Costa Rica (+506)</option> <option value="hr" data-otp-enabled="false" >Croatia (+385)</option> <option value="cy" data-otp-enabled="false" >Cyprus (+357)</option> <option value="cz" data-otp-enabled="false" >Czech Republic (+420)</option> <option value="dk" data-otp-enabled="false" >Denmark (+45)</option> <option value="dj" data-otp-enabled="false" >Djibouti (+253)</option> <option value="dm" data-otp-enabled="false" >Dominica (+1)</option> <option value="do" data-otp-enabled="false" >Dominican Republic (+1)</option> <option value="eg" data-otp-enabled="false" >Egypt (+20)</option> <option value="sv" data-otp-enabled="false" >El Salvador (+503)</option> <option value="gq" data-otp-enabled="false" >Equatorial Guinea (+240)</option> <option value="ee" data-otp-enabled="false" >Estonia (+372)</option> <option value="et" data-otp-enabled="false" >Ethiopia (+251)</option> <option value="fo" data-otp-enabled="false" >Faroe Islands (+298)</option> <option value="fj" data-otp-enabled="false" >Fiji (+679)</option> <option value="fi" data-otp-enabled="false" >Finland/Aland Islands (+358)</option> <option value="fr" data-otp-enabled="false" >France (+33)</option> <option value="gf" data-otp-enabled="false" >French Guiana (+594)</option> <option value="pf" data-otp-enabled="false" >French Polynesia (+689)</option> <option value="ga" data-otp-enabled="false" >Gabon (+241)</option> <option value="gm" data-otp-enabled="false" >Gambia (+220)</option> <option value="ge" data-otp-enabled="false" >Georgia (+995)</option> <option value="de" data-otp-enabled="false" >Germany (+49)</option> <option value="gh" data-otp-enabled="false" >Ghana (+233)</option> <option value="gi" data-otp-enabled="false" >Gibraltar (+350)</option> <option value="gr" data-otp-enabled="false" >Greece (+30)</option> <option value="gl" data-otp-enabled="false" >Greenland (+299)</option> <option value="gd" data-otp-enabled="false" >Grenada (+1)</option> <option value="gp" data-otp-enabled="false" >Guadeloupe (+590)</option> <option value="gu" data-otp-enabled="false" >Guam (+1)</option> <option value="gt" data-otp-enabled="false" >Guatemala (+502)</option> <option value="gn" data-otp-enabled="false" >Guinea (+224)</option> <option value="gy" data-otp-enabled="false" >Guyana (+592)</option> <option value="ht" data-otp-enabled="false" >Haiti (+509)</option> <option value="hn" data-otp-enabled="false" >Honduras (+504)</option> <option value="hk" data-otp-enabled="false" >Hong Kong (+852)</option> <option value="hu" data-otp-enabled="false" >Hungary (+36)</option> <option value="is" data-otp-enabled="false" >Iceland (+354)</option> <option value="in" data-otp-enabled="false" >India (+91)</option> <option value="id" data-otp-enabled="false" >Indonesia (+62)</option> <option value="iq" data-otp-enabled="false" >Iraq (+964)</option> <option value="ie" data-otp-enabled="false" >Ireland (+353)</option> <option value="il" data-otp-enabled="false" >Israel (+972)</option> <option value="it" data-otp-enabled="false" >Italy (+39)</option> <option value="jm" data-otp-enabled="false" >Jamaica (+1)</option> <option value="jp" data-otp-enabled="false" >Japan (+81)</option> <option value="jo" data-otp-enabled="false" >Jordan (+962)</option> <option value="ke" data-otp-enabled="false" >Kenya (+254)</option> <option value="kr" data-otp-enabled="false" >Korea, Republic of (+82)</option> <option value="xk" data-otp-enabled="false" >Kosovo (+383)</option> <option value="kw" data-otp-enabled="false" >Kuwait (+965)</option> <option value="kg" data-otp-enabled="false" >Kyrgyzstan (+996)</option> <option value="la" data-otp-enabled="false" >Laos (+856)</option> <option value="lv" data-otp-enabled="false" >Latvia (+371)</option> <option value="lb" data-otp-enabled="false" >Lebanon (+961)</option> <option value="ls" data-otp-enabled="false" >Lesotho (+266)</option> <option value="lr" data-otp-enabled="false" >Liberia (+231)</option> <option value="ly" data-otp-enabled="false" >Libya (+218)</option> <option value="li" data-otp-enabled="false" >Liechtenstein (+423)</option> <option value="lt" data-otp-enabled="false" >Lithuania (+370)</option> <option value="lu" data-otp-enabled="false" >Luxembourg (+352)</option> <option value="mo" data-otp-enabled="false" >Macao (+853)</option> <option value="mk" data-otp-enabled="false" >Macedonia (+389)</option> <option value="mg" data-otp-enabled="false" >Madagascar (+261)</option> <option value="mw" data-otp-enabled="false" >Malawi (+265)</option> <option value="my" data-otp-enabled="false" >Malaysia (+60)</option> <option value="mv" data-otp-enabled="false" >Maldives (+960)</option> <option value="ml" data-otp-enabled="false" >Mali (+223)</option> <option value="mt" data-otp-enabled="false" >Malta (+356)</option> <option value="mq" data-otp-enabled="false" >Martinique (+596)</option> <option value="mr" data-otp-enabled="false" >Mauritania (+222)</option> <option value="mu" data-otp-enabled="false" >Mauritius (+230)</option> <option value="mx" data-otp-enabled="false" >Mexico (+52)</option> <option value="mc" data-otp-enabled="false" >Monaco (+377)</option> <option value="mn" data-otp-enabled="false" >Mongolia (+976)</option> <option value="me" data-otp-enabled="false" >Montenegro (+382)</option> <option value="ms" data-otp-enabled="false" >Montserrat (+1)</option> <option value="ma" data-otp-enabled="false" >Morocco/Western Sahara (+212)</option> <option value="mz" data-otp-enabled="false" >Mozambique (+258)</option> <option value="na" data-otp-enabled="false" >Namibia (+264)</option> <option value="np" data-otp-enabled="false" >Nepal (+977)</option> <option value="nl" data-otp-enabled="false" >Netherlands (+31)</option> <option value="nz" data-otp-enabled="false" >New Zealand (+64)</option> <option value="ni" data-otp-enabled="false" >Nicaragua (+505)</option> <option value="ne" data-otp-enabled="false" >Niger (+227)</option> <option value="ng" data-otp-enabled="false" >Nigeria (+234)</option> <option value="no" data-otp-enabled="false" >Norway (+47)</option> <option value="om" data-otp-enabled="false" >Oman (+968)</option> <option value="pk" data-otp-enabled="false" >Pakistan (+92)</option> <option value="ps" data-otp-enabled="false" >Palestinian Territory (+970)</option> <option value="pa" data-otp-enabled="false" >Panama (+507)</option> <option value="py" data-otp-enabled="false" >Paraguay (+595)</option> <option value="pe" data-otp-enabled="false" >Peru (+51)</option> <option value="ph" data-otp-enabled="false" >Philippines (+63)</option> <option value="pl" data-otp-enabled="false" >Poland (+48)</option> <option value="pt" data-otp-enabled="false" >Portugal (+351)</option> <option value="pr" data-otp-enabled="false" >Puerto Rico (+1)</option> <option value="qa" data-otp-enabled="false" >Qatar (+974)</option> <option value="re" data-otp-enabled="false" >Reunion/Mayotte (+262)</option> <option value="ro" data-otp-enabled="false" >Romania (+40)</option> <option value="ru" data-otp-enabled="false" >Russia/Kazakhstan (+7)</option> <option value="rw" data-otp-enabled="false" >Rwanda (+250)</option> <option value="ws" data-otp-enabled="false" >Samoa (+685)</option> <option value="sm" data-otp-enabled="false" >San Marino (+378)</option> <option value="sa" data-otp-enabled="false" >Saudi Arabia (+966)</option> <option value="sn" data-otp-enabled="false" >Senegal (+221)</option> <option value="rs" data-otp-enabled="false" >Serbia (+381)</option> <option value="sc" data-otp-enabled="false" >Seychelles (+248)</option> <option value="sl" data-otp-enabled="false" >Sierra Leone (+232)</option> <option value="sg" data-otp-enabled="false" >Singapore (+65)</option> <option value="sk" data-otp-enabled="false" >Slovakia (+421)</option> <option value="si" data-otp-enabled="false" >Slovenia (+386)</option> <option value="za" data-otp-enabled="false" >South Africa (+27)</option> <option value="es" data-otp-enabled="false" >Spain (+34)</option> <option value="lk" data-otp-enabled="false" >Sri Lanka (+94)</option> <option value="kn" data-otp-enabled="false" >St Kitts and Nevis (+1)</option> <option value="lc" data-otp-enabled="false" >St Lucia (+1)</option> <option value="vc" data-otp-enabled="false" >St Vincent Grenadines (+1)</option> <option value="sd" data-otp-enabled="false" >Sudan (+249)</option> <option value="sr" data-otp-enabled="false" >Suriname (+597)</option> <option value="sz" data-otp-enabled="false" >Swaziland (+268)</option> <option value="se" data-otp-enabled="false" >Sweden (+46)</option> <option value="ch" data-otp-enabled="false" >Switzerland (+41)</option> <option value="tw" data-otp-enabled="false" >Taiwan (+886)</option> <option value="tj" data-otp-enabled="false" >Tajikistan (+992)</option> <option value="tz" data-otp-enabled="false" >Tanzania (+255)</option> <option value="th" data-otp-enabled="false" >Thailand (+66)</option> <option value="tg" data-otp-enabled="false" >Togo (+228)</option> <option value="to" data-otp-enabled="false" >Tonga (+676)</option> <option value="tt" data-otp-enabled="false" >Trinidad and Tobago (+1)</option> <option value="tn" data-otp-enabled="false" >Tunisia (+216)</option> <option value="tr" data-otp-enabled="false" >Turkey (+90)</option> <option value="tc" data-otp-enabled="false" >Turks and Caicos Islands (+1)</option> <option value="ug" data-otp-enabled="false" >Uganda (+256)</option> <option value="ua" data-otp-enabled="false" >Ukraine (+380)</option> <option value="ae" data-otp-enabled="false" >United Arab Emirates (+971)</option> <option value="gb" data-otp-enabled="false" >United Kingdom (+44)</option> <option value="us" data-otp-enabled="false" selected>United States (+1)</option> <option value="uy" data-otp-enabled="false" >Uruguay (+598)</option> <option value="uz" data-otp-enabled="false" >Uzbekistan (+998)</option> <option value="ve" data-otp-enabled="false" >Venezuela (+58)</option> <option value="vn" data-otp-enabled="false" >Vietnam (+84)</option> <option value="vg" data-otp-enabled="false" >Virgin Islands, British (+1)</option> <option value="vi" data-otp-enabled="false" >Virgin Islands, U.S. (+1)</option> <option value="ye" data-otp-enabled="false" >Yemen (+967)</option> <option value="zm" data-otp-enabled="false" >Zambia (+260)</option> <option value="zw" data-otp-enabled="false" >Zimbabwe (+263)</option></select> </div> <label for="phone-number">Phone number:</label> <input name="phone_number" id="phone-number" type="text" class="prepend full-width" data-js-hook="sms-notification-field"> <div class="sms-atl-error" id="sms-atl-error"></div> <div class="clearfix"></div> <div class="opt-container-section" id="otp-container" style="display:none"> <a href="#" id="btn-subcriber-change-number">Change number</a> <label for="otp">Enter OTP:</label> <input name="otp" id="otp" type="text" class="prepend full-width"> <p id="timer">Resend OTP in: <span id="countdown">30</span> seconds </p> <p id="resend"> Didn't receive the OTP? <a href="#" id="resend-otp-btn" >Resend OTP </a> </p> </div> </div> </div> <input type="hidden" name="captcha_error" id="captcha_error" value="false" autocomplete="off" /> <input type="submit" value="Subscribe via Text Message" class="flat-button full-width g-recaptcha" id="subscribe-btn-sms" data-disabled-text="Subscribing..." data-sitekey=6LcH-b0UAAAAACVQtMb14LBhflMA9y0Nmu7l_W6d data-callback="submitNewSmsSubscriber" data-error-callback="smsSubscriberCaptchaError"> <div class="terms_and_privacy_information bottom small">Message and data rates may apply. By subscribing you agree to our <a target="_blank" rel="noopener" href="https://www.python.org/privacy/">Privacy Policy</a>, the Atlassian <a target="_blank" rel="noopener" href="https://www.atlassian.com/legal/product-specific-terms#statuspage-specific-terms">Terms of Service</a>, and the Atlassian <a target="_blank" rel="noopener" href="https://www.atlassian.com/legal/privacy-policy">Privacy Policy</a>. This site is protected by reCAPTCHA and the Google <a target="_blank" rel="noopener" href="https://policies.google.com/privacy">Privacy Policy</a> and <a target="_blank" rel="noopener" data-js-hook="captcha-terms-of-service-link" href="https://policies.google.com/terms">Terms of Service</a> apply.</div> </form> </div> <div class="updates-dropdown-section slack" id="updates-dropdown-slack" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-slack-btn"> <div class="directions"> Get incident updates and maintenance status messages in Slack. </div> <a value="Subscribe via Slack" class="flat-button full-width" id="subscribe-btn-slack" data-disabled-text="Subscribing..." data-revert-on-success="true" style="margin-top:.75rem" href="https://subscriptions.statuspage.io/slack_authentication/kickoff?page_code=2p66nmmycsj3">Subscribe via Slack</a> <div class="terms_and_privacy_information bottom small">By subscribing you acknowledge our <a target="_blank" rel="noopener" href="https://www.python.org/privacy/">Privacy Policy</a>. In addition, you agree to the Atlassian <a target="_blank" rel="noopener" href="https://www.atlassian.com/legal/cloud-terms-of-service">Cloud Terms of Service</a> and acknowledge Atlassian's <a target="_blank" rel="noopener" href="https://www.atlassian.com/legal/privacy-policy">Privacy Policy</a>.</div> </div> <div class="updates-dropdown-section webhook" id="updates-dropdown-webhook" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-webhook-btn"> <div class="directions"> Get webhook notifications whenever Python Infrastructure <strong>creates</strong> an incident, <strong>updates</strong> an incident, <strong>resolves</strong> an incident or <strong>changes</strong> a component status. </div> <form id="subscribe-form-webhook" action="/subscriptions/webhook.json" accept-charset="UTF-8" data-remote="true" method="post"> <div class="control-group"> <div class="controls"> <label for="endpoint-webhooks">Webhook URL:</label> <input type="text" name="endpoint" id="endpoint-webhooks" data-js-hook="endpoint" class="full-width" aria-describedby="url-help-block" /> <p class="help-block" id="url-help-block">The URL we should send the webhooks to</p> </div> </div> <div class="control-group"> <div class="controls"> <label for="email-webhooks">Email address:</label> <input type="text" name="email" id="email-webhooks" data-js-hook="email" class="full-width" aria-describedby="email-help-block" /> <p class="help-block" id="email-help-block">We'll send you email if your endpoint fails</p> </div> </div> <input type="hidden" name="captcha_error" id="captcha_error" value="false" autocomplete="off" /> <input type="submit" value=Subscribe To Notifications class="flat-button full-width g-recaptcha" id="subscribe-btn-webhook" data-disabled-text="Subscribing..." data-sitekey=6LcQ-b0UAAAAAJjfdwO_-ozGC-CzWDj4Pm1kJ2Ah data-callback="submitNewWebhookSubscriber" data-error-callback="webhookSubscriberCaptchaError"> <div class="terms_and_privacy_information bottom small"><div class="privacy_policy_information small">By subscribing you agree to our <a target="_blank" rel="noopener" href="https://www.python.org/privacy/">Privacy Policy</a>.</div> This site is protected by reCAPTCHA and the Google <a target="_blank" rel="noopener" href="https://policies.google.com/privacy">Privacy Policy</a> and <a target="_blank" rel="noopener" data-js-hook="captcha-terms-of-service-link" href="https://policies.google.com/terms">Terms of Service</a> apply.</div> </form> </div> <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/PythonStatus" class="twitter-follow-button" data-show-count="false" data-show-screen-name="true" data-width="59px">Follow @PythonStatus</a> or&nbsp; <a href="https://twitter.com/PythonStatus" 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 atom" id="updates-dropdown-atom" role="tabpanel" aria-labelledby="updates-dropdown-atom-btn"> Get the <a href="https://status.python.org/history.atom" target="_blank">Atom Feed</a> or <a href="https://status.python.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 = "2p66nmmycsj3" 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 = "2p66nmmycsj3" 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> </div> <!-- this is outside of the .container so that the cover photo can go full width on mobile --> <div class="container"> <div class="page-status status-none"> <span class="status font-large"> All Systems Operational </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 is-group "> <div data-component-id="ncnbrqhvsvxk" class="component-inner-container status-green showcased" data-component-status="operational" data-js-hook="component-group-opener"> <span class="name"> <span class="fa group-parent-indicator color-secondary font-small fa-plus-square-o" role="button" aria-expanded="false" aria-label="Toggle python.org" tabindex="0"></span> <span> python.org </span> </span> <span class="tooltip-base tool" title="Homepage for the Python language and Python Software Foundation. Hosts downloads, links to more information, and resources for the community.">?</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." > 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-ncnbrqhvsvxk" preserveAspectRatio="none" height="34" viewBox="0 0 448 34"> <rect height="34" width="3" x="0" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-0" data-html="true" tabindex="0" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="5" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-1" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="10" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-2" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="15" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-3" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="20" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-4" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="25" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-5" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="30" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-6" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="35" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-7" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="40" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-8" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="45" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-9" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="50" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-10" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="55" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-11" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="60" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-12" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="65" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-13" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="70" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-14" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="75" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-15" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="80" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-16" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="85" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-17" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="90" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-18" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="95" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-19" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="100" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-20" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="105" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-21" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="110" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-22" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="115" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-23" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="120" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-24" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="125" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-25" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="130" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-26" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="135" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-27" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="140" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-28" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="145" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-29" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="150" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-30" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="155" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-31" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="160" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-32" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="165" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-33" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="170" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-34" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="175" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-35" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="180" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-36" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="185" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-37" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="190" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-38" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="195" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-39" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="200" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-40" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="205" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-41" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="210" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-42" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="215" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-43" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="220" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-44" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="225" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-45" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="230" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-46" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="235" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-47" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="240" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-48" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="245" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-49" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="250" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-50" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="255" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-51" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="260" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-52" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="265" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-53" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="270" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-54" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="275" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-55" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="280" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-56" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="285" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-57" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="290" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-58" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="295" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-59" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="300" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-60" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="305" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-61" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="310" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-62" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="315" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-63" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="320" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-64" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="325" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-65" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="330" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-66" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="335" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-67" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="340" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-68" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="345" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-69" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="350" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-70" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="355" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-71" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="360" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-72" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="365" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-73" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="370" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-74" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="375" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-75" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="380" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-76" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="385" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-77" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="390" y="0" fill="#9dc735" role="tab" class="uptime-day component-ncnbrqhvsvxk day-78" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="395" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-79" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="400" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-80" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="405" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-81" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="410" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-82" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="415" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-83" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="420" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-84" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="425" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-85" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="430" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-86" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="435" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-87" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="440" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-88" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="445" y="0" fill="#2fcc66" role="tab" class="uptime-day component-ncnbrqhvsvxk day-89" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> </svg> <div class="legend legend-group"> <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-ncnbrqhvsvxk"> <span id="uptime-percent-ncnbrqhvsvxk"> <var data-var="uptime-percent">99.99</var> </span> % uptime </div> <div class="spacer"></div> <div class="legend-item light legend-item-date-range">Today</div> </div> </div> </div> <!-- children components --> <div class="child-components-container "> <div data-component-id="1hfhkd3kvhn9" class="component-inner-container status-green showcased" data-component-status="operational" data-js-hook=""> <span class="name"> python.org - CDN </span> <span class="tooltip-base tool" title="Availability of python.org at our CDN edge.">?</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-1hfhkd3kvhn9" preserveAspectRatio="none" height="34" viewBox="0 0 448 34"> <rect height="34" width="3" x="0" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-0" data-html="true" tabindex="0" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="5" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-1" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="10" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-2" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="15" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-3" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="20" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-4" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="25" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-5" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="30" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-6" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="35" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-7" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="40" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-8" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="45" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-9" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="50" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-10" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="55" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-11" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="60" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-12" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="65" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-13" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="70" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-14" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="75" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-15" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="80" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-16" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="85" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-17" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="90" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-18" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="95" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-19" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="100" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-20" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="105" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-21" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="110" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-22" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="115" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-23" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="120" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-24" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="125" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-25" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="130" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-26" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="135" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-27" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="140" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-28" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="145" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-29" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="150" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-30" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="155" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-31" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="160" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-32" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="165" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-33" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="170" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-34" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="175" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-35" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="180" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-36" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="185" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-37" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="190" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-38" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="195" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-39" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="200" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-40" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="205" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-41" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="210" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-42" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="215" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-43" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="220" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-44" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="225" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-45" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="230" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-46" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="235" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-47" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="240" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-48" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="245" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-49" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="250" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-50" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="255" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-51" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="260" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-52" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="265" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-53" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="270" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-54" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="275" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-55" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="280" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-56" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="285" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-57" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="290" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-58" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="295" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-59" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="300" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-60" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="305" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-61" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="310" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-62" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="315" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-63" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="320" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-64" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="325" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-65" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="330" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-66" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="335" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-67" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="340" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-68" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="345" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-69" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="350" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-70" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="355" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-71" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="360" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-72" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="365" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-73" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="370" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-74" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="375" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-75" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="380" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-76" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="385" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-77" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="390" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-78" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="395" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-79" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="400" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-80" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="405" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-81" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="410" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-82" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="415" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-83" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="420" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-84" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="425" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-85" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="430" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-86" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="435" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-87" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="440" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 day-88" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="445" y="0" fill="#2fcc66" role="tab" class="uptime-day component-1hfhkd3kvhn9 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-1hfhkd3kvhn9"> <span id="uptime-percent-1hfhkd3kvhn9"> <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 data-component-id="z5zzdnvb32j5" class="component-inner-container status-green showcased" data-component-status="operational" data-js-hook=""> <span class="name"> python.org - Backends </span> <span class="tooltip-base tool" title="Availability of python.org&amp;apos;s backend servers.">?</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-z5zzdnvb32j5" preserveAspectRatio="none" height="34" viewBox="0 0 448 34"> <rect height="34" width="3" x="0" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-0" data-html="true" tabindex="0" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="5" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-1" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="10" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-2" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="15" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-3" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="20" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-4" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="25" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-5" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="30" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-6" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="35" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-7" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="40" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-8" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="45" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-9" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="50" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-10" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="55" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-11" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="60" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-12" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="65" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-13" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="70" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-14" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="75" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-15" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="80" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-16" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="85" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-17" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="90" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-18" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="95" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-19" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="100" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-20" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="105" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-21" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="110" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-22" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="115" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-23" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="120" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-24" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="125" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-25" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="130" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-26" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="135" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-27" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="140" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-28" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="145" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-29" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="150" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-30" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="155" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-31" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="160" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-32" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="165" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-33" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="170" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-34" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="175" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-35" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="180" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-36" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="185" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-37" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="190" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-38" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="195" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-39" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="200" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-40" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="205" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-41" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="210" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-42" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="215" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-43" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="220" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-44" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="225" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-45" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="230" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-46" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="235" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-47" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="240" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-48" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="245" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-49" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="250" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-50" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="255" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-51" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="260" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-52" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="265" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-53" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="270" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-54" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="275" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-55" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="280" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-56" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="285" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-57" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="290" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-58" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="295" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-59" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="300" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-60" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="305" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-61" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="310" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-62" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="315" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-63" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="320" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-64" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="325" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-65" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="330" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-66" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="335" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-67" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="340" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-68" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="345" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-69" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="350" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-70" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="355" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-71" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="360" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-72" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="365" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-73" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="370" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-74" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="375" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-75" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="380" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-76" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="385" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-77" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="390" y="0" fill="#b8c629" role="tab" class="uptime-day component-z5zzdnvb32j5 day-78" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="395" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-79" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="400" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-80" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="405" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-81" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="410" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-82" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="415" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-83" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="420" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-84" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="425" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-85" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="430" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-86" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="435" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-87" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="440" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 day-88" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="445" y="0" fill="#2fcc66" role="tab" class="uptime-day component-z5zzdnvb32j5 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-z5zzdnvb32j5"> <span id="uptime-percent-z5zzdnvb32j5"> <var data-var="uptime-percent">99.99</var> </span> % uptime </div> <div class="spacer"></div> <div class="legend-item light legend-item-date-range">Today</div> </div> </div> </div> <div data-component-id="09dyxnnk3tj3" class="component-inner-container status-green showcased" data-component-status="operational" data-js-hook=""> <span class="name"> python.org - Downloads Backends </span> <span class="tooltip-base tool" title="The backends that serve Python download 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-09dyxnnk3tj3" preserveAspectRatio="none" height="34" viewBox="0 0 448 34"> <rect height="34" width="3" x="0" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-0" data-html="true" tabindex="0" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="5" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-1" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="10" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-2" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="15" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-3" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="20" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-4" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="25" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-5" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="30" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-6" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="35" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-7" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="40" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-8" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="45" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-9" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="50" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-10" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="55" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-11" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="60" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-12" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="65" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-13" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="70" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-14" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="75" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-15" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="80" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-16" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="85" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-17" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="90" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-18" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="95" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-19" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="100" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-20" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="105" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-21" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="110" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-22" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="115" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-23" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="120" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-24" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="125" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-25" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="130" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-26" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="135" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-27" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="140" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-28" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="145" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-29" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="150" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-30" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="155" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-31" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="160" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-32" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="165" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-33" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="170" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-34" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="175" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-35" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="180" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-36" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="185" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-37" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="190" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-38" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="195" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-39" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="200" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-40" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="205" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-41" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="210" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-42" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="215" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-43" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="220" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-44" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="225" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-45" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="230" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-46" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="235" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-47" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="240" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-48" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="245" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-49" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="250" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-50" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="255" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-51" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="260" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-52" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="265" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-53" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="270" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-54" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="275" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-55" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="280" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-56" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="285" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-57" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="290" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-58" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="295" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-59" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="300" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-60" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="305" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-61" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="310" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-62" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="315" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-63" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="320" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-64" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="325" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-65" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="330" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-66" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="335" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-67" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="340" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-68" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="345" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-69" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="350" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-70" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="355" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-71" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="360" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-72" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="365" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-73" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="370" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-74" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="375" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-75" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="380" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-76" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="385" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-77" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="390" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-78" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="395" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-79" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="400" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-80" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="405" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-81" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="410" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-82" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="415" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-83" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="420" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-84" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="425" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-85" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="430" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-86" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="435" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-87" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="440" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 day-88" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="445" y="0" fill="#2fcc66" role="tab" class="uptime-day component-09dyxnnk3tj3 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-09dyxnnk3tj3"> <span id="uptime-percent-09dyxnnk3tj3"> <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> <div class="component-container border-color is-group "> <div data-component-id="dhqvcb8lvrh1" class="component-inner-container status-green showcased" data-component-status="operational" data-js-hook="component-group-opener"> <span class="name"> <span class="fa group-parent-indicator color-secondary font-small fa-plus-square-o" role="button" aria-expanded="false" aria-label="Toggle PyPI" tabindex="0"></span> <span> PyPI </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." > 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-dhqvcb8lvrh1" preserveAspectRatio="none" height="34" viewBox="0 0 448 34"> <rect height="34" width="3" x="0" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-0" data-html="true" tabindex="0" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="5" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-1" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="10" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-2" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="15" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-3" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="20" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-4" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="25" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-5" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="30" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-6" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="35" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-7" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="40" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-8" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="45" y="0" fill="#93c839" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-9" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="50" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-10" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="55" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-11" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="60" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-12" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="65" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-13" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="70" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-14" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="75" y="0" fill="#92c83a" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-15" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="80" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-16" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="85" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-17" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="90" y="0" fill="#95c838" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-18" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="95" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-19" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="100" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-20" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="105" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-21" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="110" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-22" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="115" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-23" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="120" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-24" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="125" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-25" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="130" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-26" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="135" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-27" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="140" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-28" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="145" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-29" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="150" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-30" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="155" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-31" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="160" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-32" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="165" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-33" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="170" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-34" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="175" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-35" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="180" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-36" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="185" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-37" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="190" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-38" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="195" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-39" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="200" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-40" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="205" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-41" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="210" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-42" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="215" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-43" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="220" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-44" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="225" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-45" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="230" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-46" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="235" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-47" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="240" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-48" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="245" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-49" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="250" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-50" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="255" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-51" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="260" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-52" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="265" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-53" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="270" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-54" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="275" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-55" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="280" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-56" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="285" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-57" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="290" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-58" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="295" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-59" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="300" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-60" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="305" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-61" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="310" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-62" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="315" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-63" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="320" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-64" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="325" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-65" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="330" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-66" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="335" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-67" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="340" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-68" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="345" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-69" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="350" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-70" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="355" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-71" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="360" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-72" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="365" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-73" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="370" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-74" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="375" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-75" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="380" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-76" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="385" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-77" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="390" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-78" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="395" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-79" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="400" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-80" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="405" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-81" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="410" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-82" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="415" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-83" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="420" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-84" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="425" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-85" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="430" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-86" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="435" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-87" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="440" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-88" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="445" y="0" fill="#2fcc66" role="tab" class="uptime-day component-dhqvcb8lvrh1 day-89" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> </svg> <div class="legend legend-group"> <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-dhqvcb8lvrh1"> <span id="uptime-percent-dhqvcb8lvrh1"> <var data-var="uptime-percent">99.99</var> </span> % uptime </div> <div class="spacer"></div> <div class="legend-item light legend-item-date-range">Today</div> </div> </div> </div> <!-- children components --> <div class="child-components-container mix-match-showcase"> <div data-component-id="06hwjcnhlz03" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> pypi.org - General </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="xt7f24hjvspn" class="component-inner-container status-green showcased" data-component-status="operational" data-js-hook=""> <span class="name"> pypi.org - CDN </span> <span class="tooltip-base tool" title="Primary PyPI endpoint, serves User Interface and APIs.">?</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-xt7f24hjvspn" preserveAspectRatio="none" height="34" viewBox="0 0 448 34"> <rect height="34" width="3" x="0" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-0" data-html="true" tabindex="0" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="5" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-1" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="10" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-2" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="15" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-3" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="20" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-4" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="25" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-5" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="30" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-6" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="35" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-7" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="40" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-8" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="45" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-9" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="50" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-10" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="55" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-11" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="60" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-12" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="65" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-13" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="70" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-14" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="75" y="0" fill="#93c839" role="tab" class="uptime-day component-xt7f24hjvspn day-15" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="80" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-16" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="85" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-17" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="90" y="0" fill="#9ac836" role="tab" class="uptime-day component-xt7f24hjvspn day-18" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="95" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-19" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="100" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-20" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="105" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-21" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="110" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-22" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="115" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-23" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="120" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-24" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="125" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-25" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="130" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-26" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="135" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-27" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="140" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-28" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="145" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-29" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="150" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-30" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="155" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-31" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="160" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-32" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="165" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-33" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="170" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-34" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="175" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-35" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="180" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-36" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="185" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-37" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="190" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-38" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="195" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-39" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="200" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-40" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="205" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-41" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="210" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-42" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="215" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-43" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="220" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-44" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="225" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-45" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="230" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-46" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="235" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-47" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="240" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-48" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="245" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-49" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="250" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-50" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="255" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-51" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="260" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-52" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="265" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-53" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="270" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-54" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="275" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-55" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="280" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-56" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="285" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-57" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="290" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-58" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="295" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-59" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="300" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-60" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="305" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-61" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="310" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-62" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="315" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-63" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="320" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-64" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="325" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-65" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="330" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-66" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="335" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-67" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="340" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-68" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="345" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-69" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="350" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-70" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="355" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-71" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="360" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-72" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="365" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-73" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="370" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-74" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="375" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-75" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="380" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-76" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="385" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-77" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="390" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-78" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="395" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-79" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="400" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-80" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="405" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-81" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="410" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-82" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="415" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-83" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="420" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-84" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="425" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-85" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="430" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-86" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="435" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-87" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="440" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn day-88" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="445" y="0" fill="#2fcc66" role="tab" class="uptime-day component-xt7f24hjvspn 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-xt7f24hjvspn"> <span id="uptime-percent-xt7f24hjvspn"> <var data-var="uptime-percent">99.99</var> </span> % uptime </div> <div class="spacer"></div> <div class="legend-item light legend-item-date-range">Today</div> </div> </div> </div> <div data-component-id="yjlyv2k3zz3p" class="component-inner-container status-green showcased" data-component-status="operational" data-js-hook=""> <span class="name"> pypi.org - Backends </span> <span class="tooltip-base tool" title="The backends that serve pypi.org">?</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-yjlyv2k3zz3p" preserveAspectRatio="none" height="34" viewBox="0 0 448 34"> <rect height="34" width="3" x="0" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-0" data-html="true" tabindex="0" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="5" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-1" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="10" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-2" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="15" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-3" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="20" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-4" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="25" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-5" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="30" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-6" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="35" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-7" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="40" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-8" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="45" y="0" fill="#9ac836" role="tab" class="uptime-day component-yjlyv2k3zz3p day-9" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="50" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-10" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="55" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-11" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="60" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-12" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="65" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-13" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="70" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-14" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="75" y="0" fill="#93c839" role="tab" class="uptime-day component-yjlyv2k3zz3p day-15" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="80" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-16" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="85" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-17" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="90" y="0" fill="#95c838" role="tab" class="uptime-day component-yjlyv2k3zz3p day-18" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="95" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-19" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="100" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-20" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="105" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-21" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="110" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-22" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="115" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-23" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="120" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-24" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="125" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-25" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="130" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-26" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="135" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-27" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="140" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-28" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="145" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-29" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="150" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-30" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="155" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-31" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="160" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-32" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="165" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-33" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="170" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-34" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="175" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-35" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="180" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-36" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="185" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-37" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="190" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-38" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="195" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-39" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="200" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-40" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="205" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-41" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="210" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-42" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="215" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-43" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="220" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-44" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="225" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-45" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="230" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-46" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="235" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-47" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="240" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-48" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="245" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-49" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="250" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-50" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="255" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-51" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="260" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-52" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="265" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-53" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="270" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-54" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="275" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-55" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="280" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-56" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="285" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-57" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="290" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-58" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="295" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-59" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="300" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-60" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="305" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-61" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="310" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-62" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="315" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-63" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="320" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-64" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="325" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-65" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="330" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-66" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="335" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-67" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="340" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-68" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="345" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-69" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="350" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-70" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="355" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-71" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="360" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-72" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="365" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-73" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="370" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-74" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="375" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-75" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="380" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-76" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="385" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-77" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="390" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-78" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="395" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-79" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="400" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-80" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="405" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-81" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="410" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-82" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="415" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-83" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="420" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-84" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="425" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-85" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="430" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-86" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="435" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-87" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="440" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p day-88" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="445" y="0" fill="#2fcc66" role="tab" class="uptime-day component-yjlyv2k3zz3p 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-yjlyv2k3zz3p"> <span id="uptime-percent-yjlyv2k3zz3p"> <var data-var="uptime-percent">99.99</var> </span> % uptime </div> <div class="spacer"></div> <div class="legend-item light legend-item-date-range">Today</div> </div> </div> </div> <div data-component-id="5k8sx11bnccq" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> pypi.org - Email </span> <span class="tooltip-base tool" title="PyPI&amp;apos;s email sending functionality including notifications, email validation, password resets, etc.">?</span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="frjs3hvgp2bk" class="component-inner-container status-green showcased" data-component-status="operational" data-js-hook=""> <span class="name"> files.pythonhosted.org - Files </span> <span class="tooltip-base tool" title="Serves Files hosted on PyPI from our Object Store backend.">?</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-frjs3hvgp2bk" preserveAspectRatio="none" height="34" viewBox="0 0 448 34"> <rect height="34" width="3" x="0" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-0" data-html="true" tabindex="0" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="5" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-1" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="10" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-2" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="15" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-3" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="20" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-4" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="25" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-5" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="30" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-6" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="35" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-7" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="40" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-8" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="45" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-9" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="50" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-10" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="55" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-11" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="60" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-12" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="65" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-13" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="70" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-14" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="75" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-15" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="80" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-16" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="85" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-17" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="90" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-18" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="95" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-19" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="100" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-20" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="105" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-21" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="110" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-22" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="115" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-23" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="120" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-24" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="125" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-25" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="130" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-26" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="135" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-27" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="140" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-28" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="145" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-29" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="150" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-30" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="155" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-31" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="160" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-32" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="165" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-33" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="170" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-34" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="175" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-35" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="180" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-36" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="185" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-37" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="190" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-38" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="195" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-39" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="200" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-40" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="205" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-41" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="210" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-42" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="215" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-43" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="220" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-44" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="225" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-45" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="230" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-46" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="235" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-47" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="240" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-48" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="245" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-49" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="250" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-50" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="255" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-51" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="260" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-52" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="265" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-53" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="270" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-54" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="275" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-55" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="280" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-56" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="285" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-57" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="290" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-58" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="295" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-59" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="300" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-60" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="305" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-61" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="310" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-62" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="315" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-63" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="320" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-64" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="325" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-65" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="330" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-66" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="335" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-67" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="340" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-68" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="345" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-69" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="350" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-70" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="355" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-71" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="360" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-72" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="365" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-73" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="370" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-74" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="375" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-75" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="380" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-76" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="385" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-77" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="390" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-78" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="395" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-79" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="400" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-80" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="405" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-81" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="410" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-82" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="415" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-83" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="420" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-84" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="425" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-85" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="430" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-86" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="435" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-87" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="440" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk day-88" data-html="true" tabindex="-1" aria-describedby="uptime-tooltip" /> <rect height="34" width="3" x="445" y="0" fill="#2fcc66" role="tab" class="uptime-day component-frjs3hvgp2bk 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-frjs3hvgp2bk"> <span id="uptime-percent-frjs3hvgp2bk"> <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 data-component-id="p2b1wmgvmwln" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> files.pythonhosted.org - Redirects </span> <span class="tooltip-base tool" title="Redirect Service for legacy URLS">?</span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="nj4jx0hljzvl" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> files.pythonhosted.org - Redirects Backends </span> <span class="tooltip-base tool" title="Redirect Service for legacy URLS">?</span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> </div> </div> <div class="component-container border-color is-group "> <div data-component-id="s5r8b11fdhsg" class="component-inner-container status-green " data-component-status="operational" data-js-hook="component-group-opener"> <span class="name"> <span class="fa group-parent-indicator color-secondary font-small fa-plus-square-o" role="button" aria-expanded="false" aria-label="Toggle PyPI Hosting Platforms" tabindex="0"></span> <span> PyPI Hosting Platforms </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." > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <!-- children components --> <div class="child-components-container "> <div data-component-id="kvxh0bsl5gq5" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> AWS elasticache-us-east-2 </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="b2thcq3wccy2" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> AWS elb-us-east-2 </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="ckpp1ygb6q8z" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> AWS ec2-us-east-2 </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="0zjhw49l92qv" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> AWS rds-us-east-2 </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="0k1l8cz1lntv" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Google Cloud Platform Google Cloud Storage </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> </div> </div> <div class="component-container border-color is-group "> <div data-component-id="9534wxp4wmw6" class="component-inner-container status-green " data-component-status="operational" data-js-hook="component-group-opener"> <span class="name"> <span class="fa group-parent-indicator color-secondary font-small fa-plus-square-o" role="button" aria-expanded="false" aria-label="Toggle docs.python.org" tabindex="0"></span> <span> docs.python.org </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." > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <!-- children components --> <div class="child-components-container "> <div data-component-id="wqrgtyqnjln9" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> docs.python.org - Backends </span> <span class="tooltip-base tool" title="Python documentation">?</span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="v2hvtpghfrwp" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> docs.python.org - CDN </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> </div> </div> <div class="component-container border-color"> <div data-component-id="6ybp1pvz8gw1" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> bugs.python.org </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="gr4mkt5lcth8" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> wiki.python.org </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 "> <div data-component-id="r8q8ln9rn01p" class="component-inner-container status-green " data-component-status="operational" data-js-hook="component-group-opener"> <span class="name"> <span class="fa group-parent-indicator color-secondary font-small fa-plus-square-o" role="button" aria-expanded="false" aria-label="Toggle mail.python.org" tabindex="0"></span> <span> mail.python.org </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." > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <!-- children components --> <div class="child-components-container "> <div data-component-id="15jrs83fkh40" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Message Handling Services </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="zqjt8mwzvvyy" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Mailing Lists and Archives - Mailman </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="zjhpksd4vrp0" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Mailing Lists and Archives - Mailman 3 </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> </div> </div> <div class="component-container border-color"> <div data-component-id="tm4ft8zp3zhk" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> psfmember.org </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="1h06jblff360" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> us.pycon.org </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 "> <div data-component-id="m207fbd4yj21" class="component-inner-container status-green " data-component-status="operational" data-js-hook="component-group-opener"> <span class="name"> <span class="fa group-parent-indicator color-secondary font-small fa-plus-square-o" role="button" aria-expanded="false" aria-label="Toggle PyPy" tabindex="0"></span> <span> PyPy </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." > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <!-- children components --> <div class="child-components-container "> <div data-component-id="fpwfxgsnw7xl" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> speed.pypy.org </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> </div> </div> <div class="component-container border-color is-group "> <div data-component-id="myn8gh5c4241" class="component-inner-container status-green " data-component-status="operational" data-js-hook="component-group-opener"> <span class="name"> <span class="fa group-parent-indicator color-secondary font-small fa-plus-square-o" role="button" aria-expanded="false" aria-label="Toggle Content Delivery Network" tabindex="0"></span> <span> Content Delivery Network </span> </span> <span class="tooltip-base tool" title="Our CDN (Content Delivery Network) is used to serve many services across the Python infrastructure. Issues here may cause localized or global outages for some services.">?</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." > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <!-- children components --> <div class="child-components-container "> <div data-component-id="q0p4457f20q6" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Asia/Pacific (HK) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="9xfmnwl8nk9m" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly US East (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="ntl29mdp72bn" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly US East (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="dtnlrslrh201" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly US Central (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="symvw7w7yt5k" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly US Central (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="qrswjt48y6nt" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly US West (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="89b6s57xx1nq" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly US West (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="n70z3mymqgqw" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Europe (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="k1bmjv2lxw72" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Europe (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="ww57y0sqznzm" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Europe (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="y7mr29n4fb7x" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Asia/Pacific (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="tzf9xjgvt2f5" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Asia/Pacific (NZ) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="hq72t7pj211c" 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="tp3zx66wc5sc" 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="j0qhx6d1dj6k" 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="k7jt8v8hclw0" 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="db7ff5bfykmq" 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="cl2tm84h2b9b" 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="cg3k4kmn3bm0" 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="2v5rwbt9vxfx" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Wellington (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="18q3k532vryh" 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="xrpmsnhgj9x0" 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="tfq4rgbkgv0q" 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="lcncvvqrclbv" 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="d4qkhbkvhhgv" 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="gnyd0pnhv6ql" 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="lmxn2qhczfxb" 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="sksk8x5xmk2x" 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="wgw9swtq47n4" 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="2ysn6z22jnrz" 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="x4yzlktx7s3l" 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="6tm7f1fnyjbw" 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="tl2q6xvf8gmn" 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="hrm0rkt9z4tm" 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="2yhyfn4p0mwm" 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="lk982psnyynp" 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="0rjm0hqypf1z" 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="mwgq21j43dqz" 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="wq61cc55n5wm" 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="m733wyv5wh3k" 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="z72nkdz1ydym" 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="6tnkysbgwy97" 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="y5yvw1dvm3dv" 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="sxwj5t12gxx1" 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="5w67j6f7z8jh" 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="fwxsbr189wm2" 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="1xbvxn2w10b9" 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="3kp00jymqvwr" 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="x88d6w6sqsg4" 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="sn096fvwslw0" 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="86lf40xpc464" 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="5nk1sqy5gldr" 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="rh1p298tdvqn" 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="dzb6x8yh81z9" 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="r3f0ldyy97kp" 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="cqd1nl03kcbm" 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="fd7tt5t12xxr" 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="fkgpwps42l3g" 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="kwzhngbhm8n2" 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="bpcq80vt9cbk" 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="fhhbf9ds6hwg" 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="gpxqtltnt10v" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Purging </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="69tjdqjy3svx" 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="kqdvnljff0ws" 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="6q6ytq67vpsl" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Seoul (ICN) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="z1qjvrr9lm1f" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Manila (MNL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="2jxxnzf4d8tb" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Kuala Lumpur (KUL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="830x7w1wqzhq" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Dubai (DXB) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="pn63bqm4lmgz" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Christchurch (CHC) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="qd85tg3vjytl" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Adelaide (ADL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="yn09bzj9h2yr" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Ghana (ACC) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="sl1yx5fms1gf" 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="699mjnhdqdc1" 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 data-component-id="hzz6126jzx2s" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Fortaleza (FOR) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="r2bzxrdk71f8" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Seattle (BFI) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="gq0n7776rr5t" 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="3wd9p64jl50h" 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="80nrqrnp5b3j" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Los Angeles (LGB - LAX/SNA) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="0dnmvgp6rg8g" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Honolulu (HNL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="jl9snbs3pq0m" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Gainesville (GNV) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="3tbd3tcfz0st" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Detroit (DTW) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="nxnc7vrg8676" 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="fv7rtxfx5c01" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Calgary (YYC) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="3gnv4ljw70hy" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Atlanta (ATL) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="dnnpzrtd9832" 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="zt7b4pjyp5xw" 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="y13qftsfj4n2" 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="3m16bjl694hl" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Kolkata (CCU) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="m2vb18f8q108" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Hyderabad (HYD) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="57zt6dsc5w32" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Palermo (PMO) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="dfpbzq4jn2d3" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Sofia (SOF) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="z2h3q9wdv2rk" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Rome (FCO) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="xd6nblf2dmsg" 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="wflxj3tq5g4c" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Milan (LIN) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="w47z9ft3g7rm" 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="smyn3xv84bc4" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Lisbon (LIS) </span> <span class="component-status " title="" > Operational </span> <span class="tool icon-indicator fa fa-check" title="Operational"></span> </div> <div data-component-id="fw7mm15m4mg0" class="component-inner-container status-green " data-component-status="operational" data-js-hook=""> <span class="name"> Fastly Brussels (BRU) </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":"ncnbrqhvsvxk","ninety":99.99,"sixty":99.99,"thirty":99.99},{"component":"1hfhkd3kvhn9","ninety":100.0,"sixty":100.0,"thirty":100.0},{"component":"z5zzdnvb32j5","ninety":99.99,"sixty":99.99,"thirty":99.98},{"component":"09dyxnnk3tj3","ninety":100.0,"sixty":100.0,"thirty":100.0},{"component":"dhqvcb8lvrh1","ninety":99.99,"sixty":100.0,"thirty":100.0},{"component":"xt7f24hjvspn","ninety":99.99,"sixty":100.0,"thirty":100.0},{"component":"yjlyv2k3zz3p","ninety":99.99,"sixty":100.0,"thirty":100.0},{"component":"frjs3hvgp2bk","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 = {"1hfhkd3kvhn9":{"component":{"code":"1hfhkd3kvhn9","name":"python.org - CDN"},"days":[{"date":"2024-08-27","outages":{},"related_events":[]},{"date":"2024-08-28","outages":{},"related_events":[]},{"date":"2024-08-29","outages":{},"related_events":[]},{"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":[]}]},"z5zzdnvb32j5":{"component":{"code":"z5zzdnvb32j5","name":"python.org - Backends"},"days":[{"date":"2024-08-27","outages":{},"related_events":[]},{"date":"2024-08-28","outages":{},"related_events":[]},{"date":"2024-08-29","outages":{},"related_events":[]},{"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":{"m":489},"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":[]}]},"09dyxnnk3tj3":{"component":{"code":"09dyxnnk3tj3","name":"python.org - Downloads Backends","startDate":"2024-08-26"},"days":[{"date":"2024-08-27","outages":{},"related_events":[]},{"date":"2024-08-28","outages":{},"related_events":[]},{"date":"2024-08-29","outages":{},"related_events":[]},{"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":[]}]},"ncnbrqhvsvxk":{"component":{"code":"ncnbrqhvsvxk","name":"python.org","isGroup":true,"group":["1hfhkd3kvhn9","z5zzdnvb32j5","09dyxnnk3tj3"]},"days":[{"date":"2024-08-27","outages":{}},{"date":"2024-08-28","outages":{}},{"date":"2024-08-29","outages":{}},{"date":"2024-08-30","outages":{}},{"date":"2024-08-31","outages":{}},{"date":"2024-09-01","outages":{}},{"date":"2024-09-02","outages":{}},{"date":"2024-09-03","outages":{}},{"date":"2024-09-04","outages":{}},{"date":"2024-09-05","outages":{}},{"date":"2024-09-06","outages":{}},{"date":"2024-09-07","outages":{}},{"date":"2024-09-08","outages":{}},{"date":"2024-09-09","outages":{}},{"date":"2024-09-10","outages":{}},{"date":"2024-09-11","outages":{}},{"date":"2024-09-12","outages":{}},{"date":"2024-09-13","outages":{}},{"date":"2024-09-14","outages":{}},{"date":"2024-09-15","outages":{}},{"date":"2024-09-16","outages":{}},{"date":"2024-09-17","outages":{}},{"date":"2024-09-18","outages":{}},{"date":"2024-09-19","outages":{}},{"date":"2024-09-20","outages":{}},{"date":"2024-09-21","outages":{}},{"date":"2024-09-22","outages":{}},{"date":"2024-09-23","outages":{}},{"date":"2024-09-24","outages":{}},{"date":"2024-09-25","outages":{}},{"date":"2024-09-26","outages":{}},{"date":"2024-09-27","outages":{}},{"date":"2024-09-28","outages":{}},{"date":"2024-09-29","outages":{}},{"date":"2024-09-30","outages":{}},{"date":"2024-10-01","outages":{}},{"date":"2024-10-02","outages":{}},{"date":"2024-10-03","outages":{}},{"date":"2024-10-04","outages":{}},{"date":"2024-10-05","outages":{}},{"date":"2024-10-06","outages":{}},{"date":"2024-10-07","outages":{}},{"date":"2024-10-08","outages":{}},{"date":"2024-10-09","outages":{}},{"date":"2024-10-10","outages":{}},{"date":"2024-10-11","outages":{}},{"date":"2024-10-12","outages":{}},{"date":"2024-10-13","outages":{}},{"date":"2024-10-14","outages":{}},{"date":"2024-10-15","outages":{}},{"date":"2024-10-16","outages":{}},{"date":"2024-10-17","outages":{}},{"date":"2024-10-18","outages":{}},{"date":"2024-10-19","outages":{}},{"date":"2024-10-20","outages":{}},{"date":"2024-10-21","outages":{}},{"date":"2024-10-22","outages":{}},{"date":"2024-10-23","outages":{}},{"date":"2024-10-24","outages":{}},{"date":"2024-10-25","outages":{}},{"date":"2024-10-26","outages":{}},{"date":"2024-10-27","outages":{}},{"date":"2024-10-28","outages":{}},{"date":"2024-10-29","outages":{}},{"date":"2024-10-30","outages":{}},{"date":"2024-10-31","outages":{}},{"date":"2024-11-01","outages":{}},{"date":"2024-11-02","outages":{}},{"date":"2024-11-03","outages":{}},{"date":"2024-11-04","outages":{}},{"date":"2024-11-05","outages":{}},{"date":"2024-11-06","outages":{}},{"date":"2024-11-07","outages":{}},{"date":"2024-11-08","outages":{}},{"date":"2024-11-09","outages":{}},{"date":"2024-11-10","outages":{}},{"date":"2024-11-11","outages":{}},{"date":"2024-11-12","outages":{}},{"date":"2024-11-13","outages":{"m":163}},{"date":"2024-11-14","outages":{}},{"date":"2024-11-15","outages":{}},{"date":"2024-11-16","outages":{}},{"date":"2024-11-17","outages":{}},{"date":"2024-11-18","outages":{}},{"date":"2024-11-19","outages":{}},{"date":"2024-11-20","outages":{}},{"date":"2024-11-21","outages":{}},{"date":"2024-11-22","outages":{}},{"date":"2024-11-23","outages":{}},{"date":"2024-11-24","outages":{}}]},"xt7f24hjvspn":{"component":{"code":"xt7f24hjvspn","name":"pypi.org - CDN"},"days":[{"date":"2024-08-27","outages":{},"related_events":[]},{"date":"2024-08-28","outages":{},"related_events":[]},{"date":"2024-08-29","outages":{},"related_events":[]},{"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":{"m":46},"related_events":[]},{"date":"2024-09-12","outages":{},"related_events":[]},{"date":"2024-09-13","outages":{},"related_events":[]},{"date":"2024-09-14","outages":{"m":122},"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":[]}]},"yjlyv2k3zz3p":{"component":{"code":"yjlyv2k3zz3p","name":"pypi.org - Backends"},"days":[{"date":"2024-08-27","outages":{},"related_events":[]},{"date":"2024-08-28","outages":{},"related_events":[]},{"date":"2024-08-29","outages":{},"related_events":[]},{"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":{"m":127},"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":{"m":37},"related_events":[]},{"date":"2024-09-12","outages":{},"related_events":[]},{"date":"2024-09-13","outages":{},"related_events":[]},{"date":"2024-09-14","outages":{"m":68},"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":[{"name":"PyPI Database Maintenance","code":"q5q5347n3s2b"}]},{"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":[]}]},"frjs3hvgp2bk":{"component":{"code":"frjs3hvgp2bk","name":"files.pythonhosted.org - Files"},"days":[{"date":"2024-08-27","outages":{},"related_events":[]},{"date":"2024-08-28","outages":{},"related_events":[]},{"date":"2024-08-29","outages":{},"related_events":[]},{"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":[]}]},"dhqvcb8lvrh1":{"component":{"code":"dhqvcb8lvrh1","name":"PyPI","isGroup":true,"group":["06hwjcnhlz03","xt7f24hjvspn","yjlyv2k3zz3p","5k8sx11bnccq","frjs3hvgp2bk","p2b1wmgvmwln","nj4jx0hljzvl"]},"days":[{"date":"2024-08-27","outages":{}},{"date":"2024-08-28","outages":{}},{"date":"2024-08-29","outages":{}},{"date":"2024-08-30","outages":{}},{"date":"2024-08-31","outages":{}},{"date":"2024-09-01","outages":{}},{"date":"2024-09-02","outages":{}},{"date":"2024-09-03","outages":{}},{"date":"2024-09-04","outages":{}},{"date":"2024-09-05","outages":{"m":42}},{"date":"2024-09-06","outages":{}},{"date":"2024-09-07","outages":{}},{"date":"2024-09-08","outages":{}},{"date":"2024-09-09","outages":{}},{"date":"2024-09-10","outages":{}},{"date":"2024-09-11","outages":{"m":27}},{"date":"2024-09-12","outages":{}},{"date":"2024-09-13","outages":{}},{"date":"2024-09-14","outages":{"m":63}},{"date":"2024-09-15","outages":{}},{"date":"2024-09-16","outages":{}},{"date":"2024-09-17","outages":{}},{"date":"2024-09-18","outages":{}},{"date":"2024-09-19","outages":{}},{"date":"2024-09-20","outages":{}},{"date":"2024-09-21","outages":{}},{"date":"2024-09-22","outages":{}},{"date":"2024-09-23","outages":{}},{"date":"2024-09-24","outages":{}},{"date":"2024-09-25","outages":{}},{"date":"2024-09-26","outages":{}},{"date":"2024-09-27","outages":{}},{"date":"2024-09-28","outages":{}},{"date":"2024-09-29","outages":{}},{"date":"2024-09-30","outages":{}},{"date":"2024-10-01","outages":{}},{"date":"2024-10-02","outages":{}},{"date":"2024-10-03","outages":{}},{"date":"2024-10-04","outages":{}},{"date":"2024-10-05","outages":{}},{"date":"2024-10-06","outages":{}},{"date":"2024-10-07","outages":{}},{"date":"2024-10-08","outages":{}},{"date":"2024-10-09","outages":{}},{"date":"2024-10-10","outages":{}},{"date":"2024-10-11","outages":{}},{"date":"2024-10-12","outages":{}},{"date":"2024-10-13","outages":{}},{"date":"2024-10-14","outages":{}},{"date":"2024-10-15","outages":{}},{"date":"2024-10-16","outages":{}},{"date":"2024-10-17","outages":{}},{"date":"2024-10-18","outages":{}},{"date":"2024-10-19","outages":{}},{"date":"2024-10-20","outages":{}},{"date":"2024-10-21","outages":{}},{"date":"2024-10-22","outages":{}},{"date":"2024-10-23","outages":{}},{"date":"2024-10-24","outages":{}},{"date":"2024-10-25","outages":{}},{"date":"2024-10-26","outages":{}},{"date":"2024-10-27","outages":{}},{"date":"2024-10-28","outages":{}},{"date":"2024-10-29","outages":{}},{"date":"2024-10-30","outages":{}},{"date":"2024-10-31","outages":{}},{"date":"2024-11-01","outages":{}},{"date":"2024-11-02","outages":{}},{"date":"2024-11-03","outages":{}},{"date":"2024-11-04","outages":{}},{"date":"2024-11-05","outages":{}},{"date":"2024-11-06","outages":{}},{"date":"2024-11-07","outages":{}},{"date":"2024-11-08","outages":{}},{"date":"2024-11-09","outages":{}},{"date":"2024-11-10","outages":{}},{"date":"2024-11-11","outages":{}},{"date":"2024-11-12","outages":{}},{"date":"2024-11-13","outages":{}},{"date":"2024-11-14","outages":{}},{"date":"2024-11-15","outages":{}},{"date":"2024-11-16","outages":{}},{"date":"2024-11-17","outages":{}},{"date":"2024-11-18","outages":{}},{"date":"2024-11-19","outages":{}},{"date":"2024-11-20","outages":{}},{"date":"2024-11-21","outages":{}},{"date":"2024-11-22","outages":{}},{"date":"2024-11-23","outages":{}},{"date":"2024-11-24","outages":{}}]}} 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="custom-metrics-container" id="custom-metrics-container"> <div class="timeframes-container"> <a class="font-largest no-link" id="system-metrics" href="#system-metrics">System Metrics</a> <a href="#" class="timeframe color-secondary font-regular border-color" data-js-hook="data-time-period-toggle" data-time-period="month">Month</a> <a href="#" class="timeframe color-secondary font-regular border-color" data-js-hook="data-time-period-toggle" data-time-period="week"><span class="translation_missing" title="translation missing: en.week">Week</span></a> <a href="#" class="timeframe active color-secondary font-regular border-color" data-js-hook="data-time-period-toggle" data-time-period="day">Day</a> </div> <div class="metrics-container"> <div class="metric border-color"> <div class="metric-meta font-large"> <div class="metric-name color-primary"> PyPI CDN Edge Errors <span class="tooltip-base tool" title="Errors seen at our CDN edge for pypi.org"> ? </span> </div> <div data-js-hook="metrics-display-current-534wn55450bv" class="metric-average color-secondary"><span class="translation_missing" title="translation missing: en.fetching">Fetching</span></div> </div> <div class="metrics-display-graph"> <div class="graph-container" id="metrics-display-graph-container-534wn55450bv" data-js-hook= "metrics-display-graph-container-534wn55450bv"></div> </div> </div> <div class="metric border-color"> <div class="metric-meta font-large"> <div class="metric-name color-primary"> PyPI Files CDN Edge Errors <span class="tooltip-base tool" title="Errors seen at our CDN edge for files.pythonhosted.org"> ? </span> </div> <div data-js-hook="metrics-display-current-tkbn8mssd5fm" class="metric-average color-secondary"><span class="translation_missing" title="translation missing: en.fetching">Fetching</span></div> </div> <div class="metrics-display-graph"> <div class="graph-container" id="metrics-display-graph-container-tkbn8mssd5fm" data-js-hook= "metrics-display-graph-container-tkbn8mssd5fm"></div> </div> </div> <div class="metric border-color"> <div class="metric-meta font-large"> <div class="metric-name color-primary"> PyPI CDN Miss Times </div> <div data-js-hook="metrics-display-current-qyrv2hckqhvm" class="metric-average color-secondary"><span class="translation_missing" title="translation missing: en.fetching">Fetching</span></div> </div> <div class="metrics-display-graph"> <div class="graph-container" id="metrics-display-graph-container-qyrv2hckqhvm" data-js-hook= "metrics-display-graph-container-qyrv2hckqhvm"></div> </div> </div> <div class="metric border-color"> <div class="metric-meta font-large"> <div class="metric-name color-primary"> PyPI Files CDN Miss Times </div> <div data-js-hook="metrics-display-current-k6yzxmnc2nbn" class="metric-average color-secondary"><span class="translation_missing" title="translation missing: en.fetching">Fetching</span></div> </div> <div class="metrics-display-graph"> <div class="graph-container" id="metrics-display-graph-container-k6yzxmnc2nbn" data-js-hook= "metrics-display-graph-container-k6yzxmnc2nbn"></div> </div> </div> </div> </div> <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">24</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">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 "> <div class="date border-color font-large">Nov <var data-var="date">13</var>, <var data-var="year">2024</var></div> <div class="incident-container"> <div class="incident-title impact-maintenance font-large"> <a class="whitespace-pre-wrap" href="/incidents/q5q5347n3s2b">PyPI Database Maintenance</a> </div> <div class="updates-container"> <!-- postmortem --> <!-- incident updates --> <div class="update font-regular completed"> <strong>Completed</strong> - <span class="whitespace-pre-wrap">The scheduled maintenance has been completed.</span> <br> <small> Nov <var data-var='date'>13</var>, <var data-var='time'>19:32</var> UTC </small> </div> <div class="update font-regular in progress"> <strong>In progress</strong> - <span class="whitespace-pre-wrap">Scheduled maintenance is currently in progress. We will provide updates as necessary.</span> <br> <small> Nov <var data-var='date'>13</var>, <var data-var='time'>19:30</var> UTC </small> </div> <div class="update font-regular scheduled"> <strong>Scheduled</strong> - <span class="whitespace-pre-wrap">PyPI will be undergoing a brief period of database maintenance to ensure that a set of migrations can complete without contention.<br /><br />During this time all PyPI backends will be temporarily unavailable and uploads will be disabled. Some requests that are not cached in our CDN may fail, particularly for recently updated projects and pages.</span> <br> <small> Nov <var data-var='date'>13</var>, <var data-var='time'>19:15</var> UTC </small> </div> </div> </div> </div> <div class="status-day font-regular no-incidents"> <div class="date border-color font-large">Nov <var data-var="date">12</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">11</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">10</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">&larr;</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.python.org&amp;utm_content=SP-notifications&amp;utm_medium=powered-by&amp;utm_source=inapp">Powered by Atlassian Statuspage</a></span> </div> </div> </div> <!-- custom metrics stuff --> <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"> $(function() { SP.currentPage.registerSubscriptionForm('email'); SP.currentPage.registerSubscriptionForm('sms'); SP.currentPage.registerSubscriptionForm('webhook'); }); </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 src="https://dka575ofm4ao0.cloudfront.net/assets/vendor/highstock.min-a7181c8f093438143dae37524f8463a97e2503789bc322732d3141f2c00c1c1a.js"></script> <script> //<![CDATA[ String.prototype.commafy = function () { return this.replace(/(^|[^\w.])(\d{4,})/g, function($0, $1, $2) { return $1 + $2.replace(/\d(?=(?:\d\d\d)+(?!\d))/g, "$&,"); }); } Number.prototype.commafy = function () { return String(this).commafy(); } $(function() { SP.currentPage.numberToDecimalPlaces = function(num, dec) { if (dec == 0) { return Math.round(num).commafy(); } newnum = num.toFixed(dec) var finalValue; // this gets rid of the 100.000% thing if (num == parseInt(newnum)) finalValue = Math.round(num); else finalValue = newnum; return finalValue.commafy(); } SP.currentPage.getDataForTimePeriod = function(period) { $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//status.python.org/metrics-display/534wn55450bv/_.json".replace('_', period) }).done(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-534wn55450bv') , $graphContainer = HRB.utils.djshook('metrics-display-graph-container-534wn55450bv'); var errorMsg = null; if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for <strong>PyPI CDN Edge Errors</strong>.</div>'; } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; } } if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for <strong>PyPI CDN Edge Errors</strong> for this time period yet."; } } else { errorMsg = "Failed to load. <strong>PyPI CDN Edge Errors</strong>"; } if(errorMsg !== null) { $metricSummaryLabel.text("--"); // display -- instead of number $graphContainer.html('<div class="small" style="text-align:center;">' + errorMsg + '</div>'); // removed .parent().find('.metric-meta').remove() so name still shows $graphContainer.removeAttr("style"); return; } $graphContainer.show(); $graphContainer.attr("style", "height: 120px"); // set style after error message removed it // proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['sum'], 0 ) + ' errors'); var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000; var startingBucketMsec = parseInt((new Date()).getTime() / intervalMsec) * intervalMsec; for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec; for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; } } // local time var offset = -1 * (new Date()).getTimezoneOffset() * 60 * 1000; metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; } metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse(); } // set Global options Highcharts.setOptions({ lang: { thousandsSep: ',' } }); $('#metrics-display-graph-container-534wn55450bv').highcharts('StockChart', { plotOptions : { series : { animation : false, color : '#3498db', connectNulls: false }, }, chart : { backgroundColor: '#ffffff' }, title : { text: '', style: { display: 'none', } }, credits : { enabled : false }, exporting : { enabled : false }, rangeSelector : { enabled : false }, scrollbar : { enabled : false }, navigator : { enabled : false }, xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' } }, lineColor: '#E0E0E0', }, yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { align: 'left', x: 5, y: 3, style : { color: '#AAAAAA' }, enabled : true }, showLastLabel: true, tickPixelInterval: 40, }, series : [ { name : 'PyPI CDN Edge Errors', data : metricDataPoints['ynl2fss35v6l'], tooltip: { valueSuffix: ' errors' }, enableMouseTracking : ($(window).outerWidth() > 480) && true } ], tooltip: { borderWidth: 0, enabled: ($(window).outerWidth() > 480) && true, headerFormat: "<span style='font-size: 10px'>{point.key} </span>", hideDelay: 300, pointFormat: "<span style='color:{point.color}'>●</span> <b>{point.y}</b><br/>", positioner: function() { return {x: 0, y: 0 }; }, shadow: false, shape: "square", split: false } }); }); $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//status.python.org/metrics-display/tkbn8mssd5fm/_.json".replace('_', period) }).done(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-tkbn8mssd5fm') , $graphContainer = HRB.utils.djshook('metrics-display-graph-container-tkbn8mssd5fm'); var errorMsg = null; if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for <strong>PyPI Files CDN Edge Errors</strong>.</div>'; } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; } } if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for <strong>PyPI Files CDN Edge Errors</strong> for this time period yet."; } } else { errorMsg = "Failed to load. <strong>PyPI Files CDN Edge Errors</strong>"; } if(errorMsg !== null) { $metricSummaryLabel.text("--"); // display -- instead of number $graphContainer.html('<div class="small" style="text-align:center;">' + errorMsg + '</div>'); // removed .parent().find('.metric-meta').remove() so name still shows $graphContainer.removeAttr("style"); return; } $graphContainer.show(); $graphContainer.attr("style", "height: 120px"); // set style after error message removed it // proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['sum'], 0 ) + ' errors'); var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000; var startingBucketMsec = parseInt((new Date()).getTime() / intervalMsec) * intervalMsec; for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec; for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; } } // local time var offset = -1 * (new Date()).getTimezoneOffset() * 60 * 1000; metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; } metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse(); } // set Global options Highcharts.setOptions({ lang: { thousandsSep: ',' } }); $('#metrics-display-graph-container-tkbn8mssd5fm').highcharts('StockChart', { plotOptions : { series : { animation : false, color : '#3498db', connectNulls: false }, }, chart : { backgroundColor: '#ffffff' }, title : { text: '', style: { display: 'none', } }, credits : { enabled : false }, exporting : { enabled : false }, rangeSelector : { enabled : false }, scrollbar : { enabled : false }, navigator : { enabled : false }, xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' } }, lineColor: '#E0E0E0', }, yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { align: 'left', x: 5, y: 3, style : { color: '#AAAAAA' }, enabled : true }, showLastLabel: true, tickPixelInterval: 40, }, series : [ { name : 'PyPI Files CDN Edge Errors', data : metricDataPoints['7gp3xp7t85gp'], tooltip: { valueSuffix: ' errors' }, enableMouseTracking : ($(window).outerWidth() > 480) && true } ], tooltip: { borderWidth: 0, enabled: ($(window).outerWidth() > 480) && true, headerFormat: "<span style='font-size: 10px'>{point.key} </span>", hideDelay: 300, pointFormat: "<span style='color:{point.color}'>●</span> <b>{point.y}</b><br/>", positioner: function() { return {x: 0, y: 0 }; }, shadow: false, shape: "square", split: false } }); }); $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//status.python.org/metrics-display/qyrv2hckqhvm/_.json".replace('_', period) }).done(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-qyrv2hckqhvm') , $graphContainer = HRB.utils.djshook('metrics-display-graph-container-qyrv2hckqhvm'); var errorMsg = null; if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for <strong>PyPI CDN Miss Times</strong>.</div>'; } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; } } if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for <strong>PyPI CDN Miss Times</strong> for this time period yet."; } } else { errorMsg = "Failed to load. <strong>PyPI CDN Miss Times</strong>"; } if(errorMsg !== null) { $metricSummaryLabel.text("--"); // display -- instead of number $graphContainer.html('<div class="small" style="text-align:center;">' + errorMsg + '</div>'); // removed .parent().find('.metric-meta').remove() so name still shows $graphContainer.removeAttr("style"); return; } $graphContainer.show(); $graphContainer.attr("style", "height: 120px"); // set style after error message removed it // proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + ' ms'); var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000; var startingBucketMsec = parseInt((new Date()).getTime() / intervalMsec) * intervalMsec; for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec; for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; } } // local time var offset = -1 * (new Date()).getTimezoneOffset() * 60 * 1000; metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; } metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse(); } // set Global options Highcharts.setOptions({ lang: { thousandsSep: ',' } }); $('#metrics-display-graph-container-qyrv2hckqhvm').highcharts('StockChart', { plotOptions : { series : { animation : false, color : '#3498db', connectNulls: false }, }, chart : { backgroundColor: '#ffffff' }, title : { text: '', style: { display: 'none', } }, credits : { enabled : false }, exporting : { enabled : false }, rangeSelector : { enabled : false }, scrollbar : { enabled : false }, navigator : { enabled : false }, xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' } }, lineColor: '#E0E0E0', }, yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { align: 'left', x: 5, y: 3, style : { color: '#AAAAAA' }, enabled : true }, showLastLabel: true, tickPixelInterval: 40, }, series : [ { name : 'PyPI CDN Miss Times', data : metricDataPoints['n2cqm3ys8z1f'], tooltip: { valueSuffix: ' ms' }, enableMouseTracking : ($(window).outerWidth() > 480) && true } ], tooltip: { borderWidth: 0, enabled: ($(window).outerWidth() > 480) && true, headerFormat: "<span style='font-size: 10px'>{point.key} </span>", hideDelay: 300, pointFormat: "<span style='color:{point.color}'>●</span> <b>{point.y}</b><br/>", positioner: function() { return {x: 0, y: 0 }; }, shadow: false, shape: "square", split: false } }); }); $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//status.python.org/metrics-display/k6yzxmnc2nbn/_.json".replace('_', period) }).done(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-k6yzxmnc2nbn') , $graphContainer = HRB.utils.djshook('metrics-display-graph-container-k6yzxmnc2nbn'); var errorMsg = null; if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for <strong>PyPI Files CDN Miss Times</strong>.</div>'; } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; } } if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for <strong>PyPI Files CDN Miss Times</strong> for this time period yet."; } } else { errorMsg = "Failed to load. <strong>PyPI Files CDN Miss Times</strong>"; } if(errorMsg !== null) { $metricSummaryLabel.text("--"); // display -- instead of number $graphContainer.html('<div class="small" style="text-align:center;">' + errorMsg + '</div>'); // removed .parent().find('.metric-meta').remove() so name still shows $graphContainer.removeAttr("style"); return; } $graphContainer.show(); $graphContainer.attr("style", "height: 120px"); // set style after error message removed it // proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + ' ms'); var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000; var startingBucketMsec = parseInt((new Date()).getTime() / intervalMsec) * intervalMsec; for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec; for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; } } // local time var offset = -1 * (new Date()).getTimezoneOffset() * 60 * 1000; metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; } metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse(); } // set Global options Highcharts.setOptions({ lang: { thousandsSep: ',' } }); $('#metrics-display-graph-container-k6yzxmnc2nbn').highcharts('StockChart', { plotOptions : { series : { animation : false, color : '#3498db', connectNulls: false }, }, chart : { backgroundColor: '#ffffff' }, title : { text: '', style: { display: 'none', } }, credits : { enabled : false }, exporting : { enabled : false }, rangeSelector : { enabled : false }, scrollbar : { enabled : false }, navigator : { enabled : false }, xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' } }, lineColor: '#E0E0E0', }, yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { align: 'left', x: 5, y: 3, style : { color: '#AAAAAA' }, enabled : true }, showLastLabel: true, tickPixelInterval: 40, }, series : [ { name : 'PyPI Files CDN Miss Times', data : metricDataPoints['3jpc71t1bttd'], tooltip: { valueSuffix: ' ms' }, enableMouseTracking : ($(window).outerWidth() > 480) && true } ], tooltip: { borderWidth: 0, enabled: ($(window).outerWidth() > 480) && true, headerFormat: "<span style='font-size: 10px'>{point.key} </span>", hideDelay: 300, pointFormat: "<span style='color:{point.color}'>●</span> <b>{point.y}</b><br/>", positioner: function() { return {x: 0, y: 0 }; }, shadow: false, shape: "square", split: false } }); }); } var $timePeriodToggles = HRB.utils.djshook('data-time-period-toggle'); SP.currentPage.activeTimePeriodToggle = function(period) { $timePeriodToggles.removeClass('active'); $timePeriodToggles.filter('[data-time-period="' + period + '"]').addClass('active'); } SP.currentPage.getAndDisplayInitialChartData = function() { if (window.location.hash == '#week') { SP.currentPage.getDataForTimePeriod('week'); SP.currentPage.activeTimePeriodToggle('week'); } else if (window.location.hash == '#month') { SP.currentPage.getDataForTimePeriod('month'); SP.currentPage.activeTimePeriodToggle('month'); } else { SP.currentPage.getDataForTimePeriod('day'); SP.currentPage.activeTimePeriodToggle('day'); } } $timePeriodToggles.on('click', function() { var newPeriod = $(this).attr('data-time-period'); SP.currentPage.activeTimePeriodToggle(newPeriod); SP.currentPage.getDataForTimePeriod(newPeriod); window.location.hash = newPeriod; return false; }); SP.currentPage.getAndDisplayInitialChartData(); }) //]]> </script> <script> /** INITIALIZATION **/ var recaptchaIds = {} // Unfortunately 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’t 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.python.org&amp;utm_content=SP-notifications&amp;utm_medium=powered-by&amp;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>

Pages: 1 2 3 4 5 6 7 8 9 10