Mobil Sohbet Status 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"};
All Systems Operational
API (example) Operational
90 days ago
100.0 % uptime
Today
Management Portal (example) Operational
90 days ago
100.0 % uptime
Today
Sohbet ? Operational
90 days ago
100.0 % uptime
Today
Operational
Degraded Performance
Partial Outage
Major Outage
Maintenance
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":"c2fhrr50ds74","ninety":100.0,"sixty":100.0,"thirty":100.0},{"component":"4fm4bc5pcykt","ninety":100.0,"sixty":100.0,"thirty":100.0},{"component":"j2q6g08q1pkz","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(); });
Major outage
Partial outage
No downtime recorded on this day.
No data exists for this day.
had a major outage.
had a partial outage.
/** 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 = {"c2fhrr50ds74":{"component":{"code":"c2fhrr50ds74","name":"API (example)","startDate":"2022-05-03"},"days":[{"date":"2024-02-21","outages":{},"related_events":[]},{"date":"2024-02-22","outages":{},"related_events":[]},{"date":"2024-02-23","outages":{},"related_events":[]},{"date":"2024-02-24","outages":{},"related_events":[]},{"date":"2024-02-25","outages":{},"related_events":[]},{"date":"2024-02-26","outages":{},"related_events":[]},{"date":"2024-02-27","outages":{},"related_events":[]},{"date":"2024-02-28","outages":{},"related_events":[]},{"date":"2024-02-29","outages":{},"related_events":[]},{"date":"2024-03-01","outages":{},"related_events":[]},{"date":"2024-03-02","outages":{},"related_events":[]},{"date":"2024-03-03","outages":{},"related_events":[]},{"date":"2024-03-04","outages":{},"related_events":[]},{"date":"2024-03-05","outages":{},"related_events":[]},{"date":"2024-03-06","outages":{},"related_events":[]},{"date":"2024-03-07","outages":{},"related_events":[]},{"date":"2024-03-08","outages":{},"related_events":[]},{"date":"2024-03-09","outages":{},"related_events":[]},{"date":"2024-03-10","outages":{},"related_events":[]},{"date":"2024-03-11","outages":{},"related_events":[]},{"date":"2024-03-12","outages":{},"related_events":[]},{"date":"2024-03-13","outages":{},"related_events":[]},{"date":"2024-03-14","outages":{},"related_events":[]},{"date":"2024-03-15","outages":{},"related_events":[]},{"date":"2024-03-16","outages":{},"related_events":[]},{"date":"2024-03-17","outages":{},"related_events":[]},{"date":"2024-03-18","outages":{},"related_events":[]},{"date":"2024-03-19","outages":{},"related_events":[]},{"date":"2024-03-20","outages":{},"related_events":[]},{"date":"2024-03-21","outages":{},"related_events":[]},{"date":"2024-03-22","outages":{},"related_events":[]},{"date":"2024-03-23","outages":{},"related_events":[]},{"date":"2024-03-24","outages":{},"related_events":[]},{"date":"2024-03-25","outages":{},"related_events":[]},{"date":"2024-03-26","outages":{},"related_events":[]},{"date":"2024-03-27","outages":{},"related_events":[]},{"date":"2024-03-28","outages":{},"related_events":[]},{"date":"2024-03-29","outages":{},"related_events":[]},{"date":"2024-03-30","outages":{},"related_events":[]},{"date":"2024-03-31","outages":{},"related_events":[]},{"date":"2024-04-01","outages":{},"related_events":[]},{"date":"2024-04-02","outages":{},"related_events":[]},{"date":"2024-04-03","outages":{},"related_events":[]},{"date":"2024-04-04","outages":{},"related_events":[]},{"date":"2024-04-05","outages":{},"related_events":[]},{"date":"2024-04-06","outages":{},"related_events":[]},{"date":"2024-04-07","outages":{},"related_events":[]},{"date":"2024-04-08","outages":{},"related_events":[]},{"date":"2024-04-09","outages":{},"related_events":[]},{"date":"2024-04-10","outages":{},"related_events":[]},{"date":"2024-04-11","outages":{},"related_events":[]},{"date":"2024-04-12","outages":{},"related_events":[]},{"date":"2024-04-13","outages":{},"related_events":[]},{"date":"2024-04-14","outages":{},"related_events":[]},{"date":"2024-04-15","outages":{},"related_events":[]},{"date":"2024-04-16","outages":{},"related_events":[]},{"date":"2024-04-17","outages":{},"related_events":[]},{"date":"2024-04-18","outages":{},"related_events":[]},{"date":"2024-04-19","outages":{},"related_events":[]},{"date":"2024-04-20","outages":{},"related_events":[]},{"date":"2024-04-21","outages":{},"related_events":[]},{"date":"2024-04-22","outages":{},"related_events":[]},{"date":"2024-04-23","outages":{},"related_events":[]},{"date":"2024-04-24","outages":{},"related_events":[]},{"date":"2024-04-25","outages":{},"related_events":[]},{"date":"2024-04-26","outages":{},"related_events":[]},{"date":"2024-04-27","outages":{},"related_events":[]},{"date":"2024-04-28","outages":{},"related_events":[]},{"date":"2024-04-29","outages":{},"related_events":[]},{"date":"2024-04-30","outages":{},"related_events":[]},{"date":"2024-05-01","outages":{},"related_events":[]},{"date":"2024-05-02","outages":{},"related_events":[]},{"date":"2024-05-03","outages":{},"related_events":[]},{"date":"2024-05-04","outages":{},"related_events":[]},{"date":"2024-05-05","outages":{},"related_events":[]},{"date":"2024-05-06","outages":{},"related_events":[]},{"date":"2024-05-07","outages":{},"related_events":[]},{"date":"2024-05-08","outages":{},"related_events":[]},{"date":"2024-05-09","outages":{},"related_events":[]},{"date":"2024-05-10","outages":{},"related_events":[]},{"date":"2024-05-11","outages":{},"related_events":[]},{"date":"2024-05-12","outages":{},"related_events":[]},{"date":"2024-05-13","outages":{},"related_events":[]},{"date":"2024-05-14","outages":{},"related_events":[]},{"date":"2024-05-15","outages":{},"related_events":[]},{"date":"2024-05-16","outages":{},"related_events":[]},{"date":"2024-05-17","outages":{},"related_events":[]},{"date":"2024-05-18","outages":{},"related_events":[]},{"date":"2024-05-19","outages":{},"related_events":[]},{"date":"2024-05-20","outages":{},"related_events":[]}]},"4fm4bc5pcykt":{"component":{"code":"4fm4bc5pcykt","name":"Management Portal (example)","startDate":"2022-05-03"},"days":[{"date":"2024-02-21","outages":{},"related_events":[]},{"date":"2024-02-22","outages":{},"related_events":[]},{"date":"2024-02-23","outages":{},"related_events":[]},{"date":"2024-02-24","outages":{},"related_events":[]},{"date":"2024-02-25","outages":{},"related_events":[]},{"date":"2024-02-26","outages":{},"related_events":[]},{"date":"2024-02-27","outages":{},"related_events":[]},{"date":"2024-02-28","outages":{},"related_events":[]},{"date":"2024-02-29","outages":{},"related_events":[]},{"date":"2024-03-01","outages":{},"related_events":[]},{"date":"2024-03-02","outages":{},"related_events":[]},{"date":"2024-03-03","outages":{},"related_events":[]},{"date":"2024-03-04","outages":{},"related_events":[]},{"date":"2024-03-05","outages":{},"related_events":[]},{"date":"2024-03-06","outages":{},"related_events":[]},{"date":"2024-03-07","outages":{},"related_events":[]},{"date":"2024-03-08","outages":{},"related_events":[]},{"date":"2024-03-09","outages":{},"related_events":[]},{"date":"2024-03-10","outages":{},"related_events":[]},{"date":"2024-03-11","outages":{},"related_events":[]},{"date":"2024-03-12","outages":{},"related_events":[]},{"date":"2024-03-13","outages":{},"related_events":[]},{"date":"2024-03-14","outages":{},"related_events":[]},{"date":"2024-03-15","outages":{},"related_events":[]},{"date":"2024-03-16","outages":{},"related_events":[]},{"date":"2024-03-17","outages":{},"related_events":[]},{"date":"2024-03-18","outages":{},"related_events":[]},{"date":"2024-03-19","outages":{},"related_events":[]},{"date":"2024-03-20","outages":{},"related_events":[]},{"date":"2024-03-21","outages":{},"related_events":[]},{"date":"2024-03-22","outages":{},"related_events":[]},{"date":"2024-03-23","outages":{},"related_events":[]},{"date":"2024-03-24","outages":{},"related_events":[]},{"date":"2024-03-25","outages":{},"related_events":[]},{"date":"2024-03-26","outages":{},"related_events":[]},{"date":"2024-03-27","outages":{},"related_events":[]},{"date":"2024-03-28","outages":{},"related_events":[]},{"date":"2024-03-29","outages":{},"related_events":[]},{"date":"2024-03-30","outages":{},"related_events":[]},{"date":"2024-03-31","outages":{},"related_events":[]},{"date":"2024-04-01","outages":{},"related_events":[]},{"date":"2024-04-02","outages":{},"related_events":[]},{"date":"2024-04-03","outages":{},"related_events":[]},{"date":"2024-04-04","outages":{},"related_events":[]},{"date":"2024-04-05","outages":{},"related_events":[]},{"date":"2024-04-06","outages":{},"related_events":[]},{"date":"2024-04-07","outages":{},"related_events":[]},{"date":"2024-04-08","outages":{},"related_events":[]},{"date":"2024-04-09","outages":{},"related_events":[]},{"date":"2024-04-10","outages":{},"related_events":[]},{"date":"2024-04-11","outages":{},"related_events":[]},{"date":"2024-04-12","outages":{},"related_events":[]},{"date":"2024-04-13","outages":{},"related_events":[]},{"date":"2024-04-14","outages":{},"related_events":[]},{"date":"2024-04-15","outages":{},"related_events":[]},{"date":"2024-04-16","outages":{},"related_events":[]},{"date":"2024-04-17","outages":{},"related_events":[]},{"date":"2024-04-18","outages":{},"related_events":[]},{"date":"2024-04-19","outages":{},"related_events":[]},{"date":"2024-04-20","outages":{},"related_events":[]},{"date":"2024-04-21","outages":{},"related_events":[]},{"date":"2024-04-22","outages":{},"related_events":[]},{"date":"2024-04-23","outages":{},"related_events":[]},{"date":"2024-04-24","outages":{},"related_events":[]},{"date":"2024-04-25","outages":{},"related_events":[]},{"date":"2024-04-26","outages":{},"related_events":[]},{"date":"2024-04-27","outages":{},"related_events":[]},{"date":"2024-04-28","outages":{},"related_events":[]},{"date":"2024-04-29","outages":{},"related_events":[]},{"date":"2024-04-30","outages":{},"related_events":[]},{"date":"2024-05-01","outages":{},"related_events":[]},{"date":"2024-05-02","outages":{},"related_events":[]},{"date":"2024-05-03","outages":{},"related_events":[]},{"date":"2024-05-04","outages":{},"related_events":[]},{"date":"2024-05-05","outages":{},"related_events":[]},{"date":"2024-05-06","outages":{},"related_events":[]},{"date":"2024-05-07","outages":{},"related_events":[]},{"date":"2024-05-08","outages":{},"related_events":[]},{"date":"2024-05-09","outages":{},"related_events":[]},{"date":"2024-05-10","outages":{},"related_events":[]},{"date":"2024-05-11","outages":{},"related_events":[]},{"date":"2024-05-12","outages":{},"related_events":[]},{"date":"2024-05-13","outages":{},"related_events":[]},{"date":"2024-05-14","outages":{},"related_events":[]},{"date":"2024-05-15","outages":{},"related_events":[]},{"date":"2024-05-16","outages":{},"related_events":[]},{"date":"2024-05-17","outages":{},"related_events":[]},{"date":"2024-05-18","outages":{},"related_events":[]},{"date":"2024-05-19","outages":{},"related_events":[]},{"date":"2024-05-20","outages":{},"related_events":[]}]},"j2q6g08q1pkz":{"component":{"code":"j2q6g08q1pkz","name":"Sohbet","startDate":"2022-05-03"},"days":[{"date":"2024-02-21","outages":{},"related_events":[]},{"date":"2024-02-22","outages":{},"related_events":[]},{"date":"2024-02-23","outages":{},"related_events":[]},{"date":"2024-02-24","outages":{},"related_events":[]},{"date":"2024-02-25","outages":{},"related_events":[]},{"date":"2024-02-26","outages":{},"related_events":[]},{"date":"2024-02-27","outages":{},"related_events":[]},{"date":"2024-02-28","outages":{},"related_events":[]},{"date":"2024-02-29","outages":{},"related_events":[]},{"date":"2024-03-01","outages":{},"related_events":[]},{"date":"2024-03-02","outages":{},"related_events":[]},{"date":"2024-03-03","outages":{},"related_events":[]},{"date":"2024-03-04","outages":{},"related_events":[]},{"date":"2024-03-05","outages":{},"related_events":[]},{"date":"2024-03-06","outages":{},"related_events":[]},{"date":"2024-03-07","outages":{},"related_events":[]},{"date":"2024-03-08","outages":{},"related_events":[]},{"date":"2024-03-09","outages":{},"related_events":[]},{"date":"2024-03-10","outages":{},"related_events":[]},{"date":"2024-03-11","outages":{},"related_events":[]},{"date":"2024-03-12","outages":{},"related_events":[]},{"date":"2024-03-13","outages":{},"related_events":[]},{"date":"2024-03-14","outages":{},"related_events":[]},{"date":"2024-03-15","outages":{},"related_events":[]},{"date":"2024-03-16","outages":{},"related_events":[]},{"date":"2024-03-17","outages":{},"related_events":[]},{"date":"2024-03-18","outages":{},"related_events":[]},{"date":"2024-03-19","outages":{},"related_events":[]},{"date":"2024-03-20","outages":{},"related_events":[]},{"date":"2024-03-21","outages":{},"related_events":[]},{"date":"2024-03-22","outages":{},"related_events":[]},{"date":"2024-03-23","outages":{},"related_events":[]},{"date":"2024-03-24","outages":{},"related_events":[]},{"date":"2024-03-25","outages":{},"related_events":[]},{"date":"2024-03-26","outages":{},"related_events":[]},{"date":"2024-03-27","outages":{},"related_events":[]},{"date":"2024-03-28","outages":{},"related_events":[]},{"date":"2024-03-29","outages":{},"related_events":[]},{"date":"2024-03-30","outages":{},"related_events":[]},{"date":"2024-03-31","outages":{},"related_events":[]},{"date":"2024-04-01","outages":{},"related_events":[]},{"date":"2024-04-02","outages":{},"related_events":[]},{"date":"2024-04-03","outages":{},"related_events":[]},{"date":"2024-04-04","outages":{},"related_events":[]},{"date":"2024-04-05","outages":{},"related_events":[]},{"date":"2024-04-06","outages":{},"related_events":[]},{"date":"2024-04-07","outages":{},"related_events":[]},{"date":"2024-04-08","outages":{},"related_events":[]},{"date":"2024-04-09","outages":{},"related_events":[]},{"date":"2024-04-10","outages":{},"related_events":[]},{"date":"2024-04-11","outages":{},"related_events":[]},{"date":"2024-04-12","outages":{},"related_events":[]},{"date":"2024-04-13","outages":{},"related_events":[]},{"date":"2024-04-14","outages":{},"related_events":[]},{"date":"2024-04-15","outages":{},"related_events":[]},{"date":"2024-04-16","outages":{},"related_events":[]},{"date":"2024-04-17","outages":{},"related_events":[]},{"date":"2024-04-18","outages":{},"related_events":[]},{"date":"2024-04-19","outages":{},"related_events":[]},{"date":"2024-04-20","outages":{},"related_events":[]},{"date":"2024-04-21","outages":{},"related_events":[]},{"date":"2024-04-22","outages":{},"related_events":[]},{"date":"2024-04-23","outages":{},"related_events":[]},{"date":"2024-04-24","outages":{},"related_events":[]},{"date":"2024-04-25","outages":{},"related_events":[]},{"date":"2024-04-26","outages":{},"related_events":[]},{"date":"2024-04-27","outages":{},"related_events":[]},{"date":"2024-04-28","outages":{},"related_events":[]},{"date":"2024-04-29","outages":{},"related_events":[]},{"date":"2024-04-30","outages":{},"related_events":[]},{"date":"2024-05-01","outages":{},"related_events":[]},{"date":"2024-05-02","outages":{},"related_events":[]},{"date":"2024-05-03","outages":{},"related_events":[]},{"date":"2024-05-04","outages":{},"related_events":[]},{"date":"2024-05-05","outages":{},"related_events":[]},{"date":"2024-05-06","outages":{},"related_events":[]},{"date":"2024-05-07","outages":{},"related_events":[]},{"date":"2024-05-08","outages":{},"related_events":[]},{"date":"2024-05-09","outages":{},"related_events":[]},{"date":"2024-05-10","outages":{},"related_events":[]},{"date":"2024-05-11","outages":{},"related_events":[]},{"date":"2024-05-12","outages":{},"related_events":[]},{"date":"2024-05-13","outages":{},"related_events":[]},{"date":"2024-05-14","outages":{},"related_events":[]},{"date":"2024-05-15","outages":{},"related_events":[]},{"date":"2024-05-16","outages":{},"related_events":[]},{"date":"2024-05-17","outages":{},"related_events":[]},{"date":"2024-05-18","outages":{},"related_events":[]},{"date":"2024-05-19","outages":{},"related_events":[]},{"date":"2024-05-20","outages":{},"related_events":[]}]}} var timeoutId; var monthStrings = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]; var EVENT_MAX_LENGTH = 90; // Detect device (desktop vs. touch device) function touchDevice() { var browser = bowser.getParser(window.navigator.userAgent); // if type is either mobile or tablet, return true return browser.parse().parsedResult.platform.type !== 'desktop'; } // Class is in format day-<number>. Convert to just number function dayNumberFromClass(className) { return parseInt(className.split('-')[1]); } // Class is in format component-<code>. Convert to just code function componentCodeFromClass(className) { return className.split('-')[1]; } // Convert number to string pixel measurement function intToPixels(number) { return number.toString() + 'px'; } function truncate(str) { return str.substring(0, EVENT_MAX_LENGTH) + (str.length > EVENT_MAX_LENGTH ? '...' : ''); } // Tooltip Handling class constructor function UptimeTooltipHandler(frameWidth) { this.visible = false; this.activeDay = { hovered: false }; this.tooltip = document.getElementById('uptime-tooltip'); this.frameWidth = frameWidth === undefined ? window.innerWidth : frameWidth; this.scrolling = false; window.addEventListener('mousemove', this.tooltipListener.bind(this)); window.addEventListener('orientationchange', this.orientationListener.bind(this)); // on tooltip creation, determine whether to display touch-specific controls var tooltipCloseButton = document.querySelector('.tooltip-close'); if (touchDevice()) { var componentsContainer = document.querySelector('.components-container'); componentsContainer.addEventListener('touchstart', this.handleTouch.bind(this)); tooltipCloseButton.addEventListener('touchstart', this.unhoverTooltip.bind(this)); } else { window.addEventListener('resize', this.resizeListener.bind(this)); // classList not supported by IE < 9 tooltipCloseButton.className += ' hidden'; } // Handle toggle of group elements var groupComponents = document.querySelectorAll('[data-js-hook=component-group-opener]'); for (var i = 0; i < groupComponents.length; i++) { groupComponents[i].addEventListener('click', this.hideTooltip.bind(this)); } var tooltipBox = document.querySelector('#uptime-tooltip .tooltip-box'); tooltipBox.addEventListener('mouseenter', this.mouseEnteredTooltip.bind(this)); tooltipBox.addEventListener('mouseleave', this.unhoverTooltip.bind(this)); } document.querySelectorAll('.uptime-day').forEach(function (rect) { rect.addEventListener('focus', function (event) { var tooltipHandler = new UptimeTooltipHandler(); tooltipHandler.updateHoveredDay(event); tooltipHandler.updateTooltip(event); }); rect.addEventListener('blur', function () { var tooltipHandler = new UptimeTooltipHandler(); tooltipHandler.unhoverTooltip(); }); rect.addEventListener('keydown', function (event) { if (event.key === 'Escape' || event.keyCode === 27) { var tooltipHandler = new UptimeTooltipHandler(); tooltipHandler.unhoverTooltip(); } }); }); UptimeTooltipHandler.prototype.tooltipListener = function(event) { if (!this.tooltipHovered) { this.updateHoveredDay(event); this.updateTooltip(event); } } // this handler will accommodate for mobile orientation change UptimeTooltipHandler.prototype.orientationListener = function(event) { // just close the tooltip this.unhoverTooltip(); } UptimeTooltipHandler.prototype.resizeListener = function(event) { this.frameWidth = window.innerWidth; } UptimeTooltipHandler.prototype.handleTouch = function (event) { if (event.target.classList.contains('uptime-day')) { event.stopPropagation(); this.bladeTouched(event); } } UptimeTooltipHandler.prototype.mouseEnteredTooltip = function() { // Necessary to clear the timeout set for closing the tooltip when the mouse // moves off the blade or timeline, so the tooltip isnt closed on hover clearTimeout(timeoutId); // Sets it to null so the timeout can be set later, as clearTimeout only // cancels the timer, and we need to allow it to be reset in the mouse // move handler below timeoutId = null; this.tooltipHovered = true; } UptimeTooltipHandler.prototype.unhoverTooltip = function() { this.tooltipHovered = false; this.activeDay.hovered = false; this.hideTooltip(); } UptimeTooltipHandler.prototype.bladeTouched = function (event) { event.preventDefault(); var classes = event.target.getAttribute('class').split(' '); var componentCode = componentCodeFromClass(classes[1]) var index = dayNumberFromClass(classes[2]); // If open and tapped on same component and day, close tooltip if (this.visible && this.activeDay.component === componentCode && this.activeDay.index === index) { this.hideTooltip(); } else { this.updateHoveredDay(event); this.updateTooltip(event); } } UptimeTooltipHandler.prototype.updateHoveredDay = function(event) { var classes = event.target.getAttribute('class'); // classList doesn't work in IE var onDay = classes != null && classes.split(' ').indexOf('uptime-day') !== -1; if (onDay) { classes = classes.split(' '); var componentCode = componentCodeFromClass(classes[1]); this.activeDay = { index: dayNumberFromClass(classes[2]), component: componentCode, bounds: event.target.getBoundingClientRect(), isGroup: uptimeData[componentCode].component.isGroup, hovered: true } } else { this.activeDay.hovered = false; } } UptimeTooltipHandler.prototype.updateTooltip = function(event) { var classes = event.target.getAttribute('class'); // classList doesn't work in IE var hoveredOnGraphic = classes != null && classes.split(' ').indexOf('availability-time-line-graphic') !== -1; if (this.activeDay.hovered) { this.updateTooltipData(); this.positionTooltip(); } else if (this.visible && !this.activeDay.hovered && !hoveredOnGraphic) { // Important: since this is on mouse move it will be called multiple times // which will clear timeoutId and reset it to the new value, meaning // it is a race condition to cancel it if (!timeoutId) { var _this = this; timeoutId = setTimeout(function() { _this.hideTooltip(); timeoutId = null; }, 250); } } } UptimeTooltipHandler.prototype.updateTooltipData = function() { // Get the data for the day we're hovered on var day = uptimeData[this.activeDay.component].days[this.activeDay.index]; // Update the date for the tooltip var date = new Date(day.date); // Get the component's start date. Note that it will be undefined here unless it is populated in our database var startDay = uptimeData[this.activeDay.component].component.startDate; var startDate = startDay ? new Date(startDay) : null; // Determine whether current date falls before component's start date. var beforeStartDate = startDate ? date.getTime() < startDate.getTime() : false; // UTC necessary since days are passed yyyy-mm-dd, and new Date uses midnight UTC, so local times // are presented as the day before var dateString = date.getUTCDate() + " " + monthStrings[date.getUTCMonth()] + " " + date.getUTCFullYear(); document.querySelector('#uptime-tooltip .date').innerHTML = dateString; // Update the outage fields if (this.activeDay.isGroup) { this.updateGroupOutageFields() } else { this.updateOutageFields(day.outages.p, day.outages.m, day.related_events, beforeStartDate); } } UptimeTooltipHandler.prototype.hoursFromSeconds = function(s) { return Math.floor(s / 3600); } UptimeTooltipHandler.prototype.minutesFromSeconds = function(s) { // If less than a minute, round up to 1 minute to show that some outage existed if (s > 0 && s < 60) { return 1; } // Otherwise use floor return Math.floor((s % 3600) / 60); } UptimeTooltipHandler.prototype.updateGroupOutageFields = function() { // Hide time info document.querySelector('#uptime-tooltip .outage-field.major').style.display = 'none'; document.querySelector('#uptime-tooltip .outage-field.partial').style.display = 'none'; document.querySelector(".related-events h3").style.display = 'none'; document.querySelector('.no-related-msg').style.display = 'none'; var eventList = document.getElementById("related-events-list") var cloneList = eventList.cloneNode(false); eventList.parentNode.replaceChild(cloneList, eventList); var partialCount = 0; var majorCount = 0; /** We were originally using the operationalCount as part of the no outage copy for group components, but ultimately decided not to use it. I opted to leave the variable in place in case we ever decide to use it in the future. */ var operationalCount = 0; var noDataCount = 0; var showcasedComponentsCount = 0; var components = uptimeData[this.activeDay.component].component.group for (var i = 0; i < components.length; i++) { if (!uptimeData[components[i]]) continue; showcasedComponentsCount++; var outages = uptimeData[components[i]].days[this.activeDay.index].outages; var currentDay = uptimeData[components[i]].days[this.activeDay.index]; var currentDate = new Date(currentDay.date); // Get the component's start date. Note that it will be undefined here unless it is populated in our database var startDay = uptimeData[components[i]].component.startDate; var startDate = startDay ? new Date(startDay) : null; if (outages.p) { partialCount += 1; } if (outages.m) { majorCount += 1; } // Only increase operational count if component has data for this day if (!outages.p && !outages.m) { if (startDate && currentDate.getTime() < startDate.getTime()) { noDataCount +=1; } else { operationalCount +=1; } } } document.querySelector('#major-outage-group-count').style.display = majorCount ? 'block' : 'none'; document.querySelector('#partial-outage-group-count').style.display = partialCount ? 'block' : 'none'; document.querySelector('#major-outage-group-count .count').innerText = majorCount + (majorCount === 1 ? " component" : " components"); document.querySelector('#partial-outage-group-count .count').innerText = partialCount + (partialCount === 1 ? " component" : " components "); // Show no data message only if we do not have data for any showcased components in the group var showNoDataMessage = noDataCount === showcasedComponentsCount; // Show no outages message if we have data for the components and no outages in that data document.querySelector('#uptime-tooltip .no-outages-msg').style.display = (majorCount || partialCount || showNoDataMessage) ? 'none' : 'block'; document.querySelector('#uptime-tooltip .no-data-msg').style.display = showNoDataMessage ? 'block' : 'none'; } UptimeTooltipHandler.prototype.updateOutageFields = function(partial, major, relatedEvents, beforeStartDate) { // Hide group info document.querySelector('#major-outage-group-count').style.display = 'none'; document.querySelector('#partial-outage-group-count').style.display = 'none'; // Show the message that no outage present, if none is present if (partial || major || beforeStartDate) { document.querySelector('#uptime-tooltip .no-outages-msg').style.display = 'none'; } else { document.querySelector('#uptime-tooltip .no-outages-msg').style.display = 'block'; } if (beforeStartDate) { document.querySelector('#uptime-tooltip .no-data-msg').style.display = 'block'; } else { document.querySelector('#uptime-tooltip .no-data-msg').style.display = 'none'; } // Update partial outage field if an outage exists, otherwise hide it if (partial) { var hrs = this.hoursFromSeconds(partial); var mins = this.minutesFromSeconds(partial); document.querySelector('#uptime-tooltip .outage-field.partial .value-hrs').innerHTML = hrs.toString() + ' hrs'; document.querySelector('#uptime-tooltip .outage-field.partial .value-mins').innerHTML = mins.toString() + ' mins'; document.querySelector('#uptime-tooltip .outage-field.partial').style.display = 'flex'; } else { document.querySelector('#uptime-tooltip .outage-field.partial').style.display = 'none'; } // Update major outage field if an outage exists, otherwise hide it if (major) { var hrs = this.hoursFromSeconds(major); var mins = this.minutesFromSeconds(major); document.querySelector('#uptime-tooltip .outage-field.major .value-hrs').innerHTML = hrs.toString() + ' hrs'; document.querySelector('#uptime-tooltip .outage-field.major .value-mins').innerHTML = mins.toString() + ' mins'; document.querySelector('#uptime-tooltip .outage-field.major').style.display = 'flex'; } else { document.querySelector('#uptime-tooltip .outage-field.major').style.display = 'none'; } var eventList = document.getElementById("related-events-list") var cloneList = eventList.cloneNode(false); document.querySelector(".related-events h3").style.display = (relatedEvents.length ? 'block' : 'none'); for (var i = 0; i < relatedEvents.length; i++) { var listItem = document.createElement("li"); listItem.className = "related-event"; var anchor = document.createElement("a"); anchor.className = "related-event-link"; anchor.target = "_blank"; anchor.href = window.Routes.incident_path(relatedEvents[i].code); var text = document.createTextNode(truncate(relatedEvents[i].name)); anchor.appendChild(text); listItem.appendChild(anchor); cloneList.appendChild(listItem); } const displayNoRelatedMsg = ((major || partial) && !relatedEvents.length); document.querySelector('.no-related-msg').style.display = (displayNoRelatedMsg ? 'block' : 'none'); eventList.parentNode.replaceChild(cloneList, eventList); } UptimeTooltipHandler.prototype.positionTooltip = function() { this.calculatePointerCenter(); this.calculateBoxPosition(); // show tooltip this.tooltip.style.display = 'block'; // position pointer var pointer = this.tooltip.getElementsByClassName('pointer-container')[0]; pointer.style.left = intToPixels(this.pointerCenter.x - 8); pointer.style.top = intToPixels(this.pointerCenter.y - 5); // position display box var box = this.tooltip.getElementsByClassName('tooltip-box')[0]; box.style.left = intToPixels(this.boxLeft); box.style.top = intToPixels(this.pointerCenter.y + 5); this.visible = true; } UptimeTooltipHandler.prototype.calculatePointerCenter = function() { var bounds = this.activeDay.bounds; var rectLeft = bounds.left + window.pageXOffset; var rectBottom = bounds.bottom + window.pageYOffset; var rectWidth = bounds.right - bounds.left; this.pointerCenter = { x: rectLeft + Math.floor(rectWidth / 2), y: rectBottom + 5 } } UptimeTooltipHandler.prototype.calculateBoxPosition = function() { var sideWidth = 162.5; if (this.pointerCenter.x - sideWidth < 0) { this.boxLeft = 0; } else if (this.pointerCenter.x + sideWidth > this.frameWidth) { this.boxLeft = this.frameWidth - sideWidth * 2; } else { this.boxLeft = this.pointerCenter.x - sideWidth; } } UptimeTooltipHandler.prototype.hideTooltip = function() { this.tooltip.style.display = 'none'; this.visible = false; } new UptimeTooltipHandler();
Past Incidents
May 20, 2024

No incidents reported today.

May 19, 2024

No incidents reported.

May 18, 2024

No incidents reported.

May 17, 2024

No incidents reported.

May 16, 2024

No incidents reported.

May 15, 2024

No incidents reported.

May 14, 2024

No incidents reported.

May 13, 2024

No incidents reported.

May 12, 2024

No incidents reported.

May 11, 2024

No incidents reported.

May 10, 2024

No incidents reported.

May 9, 2024

No incidents reported.

May 8, 2024

No incidents reported.

May 7, 2024

No incidents reported.

May 6, 2024

No incidents reported.

$(function() { SP.currentPage.registerSubscriptionForm('email'); }); SP.pollForChanges('/api/v2/status.json'); $(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'); }); }); /** 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']); } 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; } } }); $(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=mobilsohbet1.statuspage.io&utm_content=SP-notifications&utm_medium=powered-by&utm_source=inapp">Powered by Atlassian Statuspage</a></span>'); var setPoweredByStyles = function() { if (!$('.powered-by').length) { $link.appendTo($('.page-footer')) } $('.powered-by').attr('style', 'display: inline !important; visibility:visible !important; opacity: 1 !important; position:static !important; text-indent:0px !important; transform:scale(1) !important'); } setInterval(setPoweredByStyles, 1000); });
x server