Initial commit

This commit is contained in:
GB Whatsapp Mod 2022-08-03 17:54:53 +00:00
commit 8ccfc1677d
57 changed files with 13714 additions and 0 deletions

591
404.html Normal file
View File

@ -0,0 +1,591 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.">
<title>404 Page not found | Disroot State</title>
<link rel="canonical" href="https://state.disroot.org/404.html">
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#50162D">
<script>
var themeBrandColor = '#50162D';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #50162D;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="status-homepage status-ok ">
<div class="header header--large">
<div class="contain contain--more center">
<a href="https://state.disroot.org" class="header__logo">
<img src="/disrootorg.png" alt="Disroot State">
</a>
</div>
</div>
<div class="contain center">
<h1 class="bold">There is nothing here.</h1>
<p class="affected-text hidden">It looks like this system either does not exist or has never had any recorded downtime.</p>
<p>This could be a problem on our part. Perhaps we moved a certain resource and now it is gone. It is also possible that the resource you are trying to view is empty. But do you also mind to double check the link?</p>
</div>
<script>
if (window.location.pathname.includes('affected')) {
document.querySelector('.affected-text').className = "affected-text";
}
</script>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; Disroot State, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://state.disroot.org/index.xml" class="no-underline">to all updates</a>
</small>
</p>
</div>
</div>
</body>
</html>

9
README.md Normal file
View File

@ -0,0 +1,9 @@
This folder can be used to store any static content that you may want to link to on your status page.
You may replace the default favicons by creating icons with these names:
- favicon-16x16.png
- favicon-32x32.png
- favicon.ico
You may also replace the Netlify CMS configuration by creating an `admin` folder and placing your own `config.yml` or `index.html` file by following the project's given instructions.

371
admin/config.yml Normal file
View File

@ -0,0 +1,371 @@
# This is the main configuration file for Netlify CMS.
# Netlify CMS is used as the admin panel for cState.
#
# While some settings here can be kept as is, you may
# want to change some for a more customized solution.
#
# You can look at what each option does and how to
# toggle between them on the Netlify CMS repo docs:
#
# https://github.com/netlify/netlify-cms/blob/master/docs/quick-start.md
backend:
name: git-gateway
media_folder: "static/img"
public_folder: "/img"
site_url: ../
logo_url: https://raw.githubusercontent.com/cstate/cstate/master/images/cstate-logo-bg.svg
# Do not change this unless you know what you are doing!
collections:
- name: "issues"
label: "Incidents"
label_singular: "Incident"
description: "📚 Welcome to the cState admin panel! Here you can create new incidents or manage existing ones. Go ahead and give it a shot."
folder: "content/issues"
create: true
slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
view_filters:
- label: Active (unresolved) issues
field: resolved
pattern: false
- label: 'Resolved issues'
field: resolved
pattern: true
- label: 'Informational posts'
field: informational
pattern: true
- label: Drafts
field: draft
pattern: true
- label: Published (not a draft)
field: draft
pattern: false
- label: "High severity (down)"
field: severity
pattern: 'down'
- label: "Medium severity (disrupted)"
field: severity
pattern: 'disrupted'
- label: "Low severity (announcement)"
field: severity
pattern: 'announcement'
fields:
- {label: "Mark as incident", name: "section", widget: "hidden", default: "issue"}
- {label: "Title", name: "title", widget: "string"}
- {label: "Start date & time (your time) ⌚", name: "date", widget: "datetime"}
- {label: "Mark as resolved ✔", name: "resolved", widget: "boolean", required: false, default: false}
- {label: "Hide this from the site (make it a draft) 👀", name: "draft", widget: "boolean", required: false, default: false}
- {label: "Mark as informational ", name: "informational", widget: "boolean", required: false, default: false}
- {label: "Pin to top of page", name: "pin", widget: "boolean", required: false, default: false}
- {label: "End date & time (your time) ⌛", name: "resolvedWhen", widget: "datetime", required: false}
- label: "Affected systems (use exact name, separated by commas) 🧐"
name: "affected"
widget: "list"
required: false
- label: "Severity ⚠"
name: "severity"
widget: "select"
options:
- { label: "High (Down) ◼ ", value: "down" }
- { label: "Medium (Disrupted) ▲", value: "disrupted" }
- { label: "Low (Announcement) ◆", value: "notice" }
- label: "Markdown body (sequence of events, description, post-mortem)"
name: "body"
widget: "markdown"
default: "*Investigating* - We are investigating a potential issue that might affect the uptime of one our of services. We are sorry for any inconvenience this may cause you. This incident post will be updated once we have more information."
- name: "pages"
label: "Pages"
label_singular: "Page"
description: "📜 Create and manage pages (not connected or related to issues). Good for things like about pages, SLAs, ways of contact, and so forth."
folder: "content/pages"
create: true
slug: "{{slug}}"
view_filters:
- label: Drafts
field: draft
pattern: true
- label: Published (not a draft)
field: draft
pattern: false
fields:
- {label: "Title", name: "title", widget: "string"}
- {label: "Hide this from the site (make it a draft) 👀", name: "draft", widget: "boolean", required: false, default: false}
- {label: "Description for SEO and social media", name: "description", widget: "string", required: false}
- label: "Markdown (or HTML) body"
name: "body"
widget: "markdown"
- name: "settings"
label: "Settings"
description: "⚠ Please be warned that by editing settings from Netlify CMS you are _OVERWRITING_ what you have in the original Git repository, meaning any CURRENT SETTINGS OR COMMENTS left will be deleted."
delete: false # Prevent users from deleting documents in this collection
editor:
preview: false
files:
- name: "general"
label: "⚙ Configuration File"
file: "config.yml"
fields:
# MAIN
- label: 'Site title'
hint: 'What is your status page called? Shows up in the browser bar and meta.'
name: 'title'
widget: 'string'
- label: 'Build future posts'
name: 'buildFuture'
widget: 'boolean'
hint: 'Should posts, which have a publish date from the future, be built? Useful for sharing upcoming maintenance, etc.'
required: false
default: true
- label: 'Site display language'
hint: 'Docs: https://github.com/cstate/cstate/wiki/Translations#available-translations'
name: 'defaultContentLanguage'
widget: 'select'
default: 'en'
options:
- { label: "🇺🇸 English (default)", value: "en" }
- { label: "🇱🇹 Lietuviškai (official)", value: "lt" }
- { label: "🇹🇷 Turkish", value: "tr" }
- { label: "🇩🇪 Deutsch", value: "de" }
- { label: "🇳🇱 Dutch", value: "nl" }
- { label: "🇫🇷 French", value: "fr" }
- { label: "🇮🇹 Italiano", value: "it" }
- { label: "🇧🇷 Portuguese", value: "pt"}
- { label: "🇲🇰 Македонски", value: "mk" }
- { label: "🏳️ Tagalog", value: "tl" }
- label: 'Site language in code for html[lang]'
hint: 'Use the ISO 639-1 defined abbreviations. Examples: en, lt, de. Fully explained here: https://github.com/cstate/cstate/wiki/Customization#changing-site-language'
name: 'languageCode'
widget: 'string'
default: 'en'
- label: 'Base URL / Hostname'
name: 'baseURL'
widget: 'string'
hint: 'Where is the site hosted? Hostname (and path) to the root. Prior to version 3, a slash was used which now works in local testing, but breaks certain features of cState like RSS feeds, so a correct example for production is: https://cstate.mnts.lt'
default: '/'
# REQUIRED BUT HIDDEN
- label: 'theme'
name: 'theme'
widget: 'hidden'
default: 'cstate'
- label: 'preserveTaxonomyNames'
name: 'preserveTaxonomyNames'
widget: 'hidden'
default: 'true'
- label: "taxonomies"
name: taxonomies
widget: "hidden"
fields:
- {label: "affected", name: "affected", widget: "hidden", default: "affected"}
- label: "Outputs (Do not touch!)"
name: outputs
widget: "hidden"
fields:
- label: "page"
name: page
widget: "list"
allow_add: false
default: ['html', 'json']
- label: "section"
name: section
widget: "list"
allow_add: false
default: ['html', 'json', 'rss']
- label: "home"
name: home
widget: "list"
allow_add: false
default: ['html', 'json', 'rss', 'svg']
- label: "term"
name: term
widget: "list"
allow_add: false
default: ['html', 'json', 'rss']
- label: "Output formats (Do not touch!)"
name: outputFormats
widget: "hidden"
fields:
- label: "svg"
name: svg
fields:
- label: "isPlainText"
name: isPlainText
widget: "boolean"
default: true
- label: "mediaType"
name: mediaType
default: "image/svg+xml"
- label: 'Enable Git info'
name: 'enableGitInfo'
widget: 'hidden'
required: false
default: true
# PARAMS
- label: "Params"
name: "params"
widget: "object"
fields:
# Components
- label: "System components"
name: "systems"
widget: "list"
allow_add: true
fields:
- {label: "Name", name: "name", widget: string}
- {label: "Category", hint: "All systems need a category. For more, read the migration docs: https://github.com/cstate/cstate/wiki/Usage#v3-to-v4", name: "category", widget: string}
- {label: "Description", name: "description", widget: string, required: false}
- {label: "Partial", hint: "Custom HTML feature: https://github.com/cstate/cstate/wiki/Customization#custom-html", name: "partial", widget: string, required: false}
# Categories
- label: "Categories"
name: "categories"
widget: "list"
allow_add: true
fields:
- {label: "Name", name: "name", widget: string}
- {label: "Description", name: "description", widget: string, required: false}
- {label: "Should this category be open by default", name: "closed", widget: "boolean", required: false}
- {label: "Should the name of this category be shown? If you want to create the appearance of an Uncategorized category, enable this.", name: "untitled", widget: "boolean", required: false}
# Tabs
- label: "Tabs"
hint: 'You can add extra tabs below the main homepage summary, for example, to external sites, monitoring services, as shown in the example below. Try Uptime Robot!'
name: "customTabs"
widget: "list"
allow_add: true
fields:
- {label: "Name", name: "name", widget: string}
- {label: "Link", name: "link", widget: string}
# Dates
- label: 'Show last modified date at bottom of issues'
name: 'enableLastMod'
widget: 'boolean'
hint: 'Experimental feature shows when changes occured based on Git info. Read the wiki for more: https://github.com/cstate/cstate/wiki/Customization#time'
required: false
default: false
- label: 'Use relative time (issue began x min ago)'
name: 'useRelativeTime'
widget: 'boolean'
hint: 'IMPORTANT: In the frontmatter, the dates MUST be in the UTC time zone. If you use Netlify CMS, the CMS picks UTC time by default, so no need to worry. However, there may be very inaccurate times, if you manually define non-UTC time in your issues. Read the wiki for more: https://github.com/cstate/cstate/wiki/Customization#time'
required: false
default: true
- label: 'Skip seconds in relative time calculations?'
name: 'skipSeconds'
widget: 'boolean'
hint: 'For users of relative time. With option ON (true): "Last checked <1 min ago". With option OFF (false; default): "Last checked 20s ago". Read the wiki for more: https://github.com/cstate/cstate/wiki/Customization#skip-seconds-v50'
required: false
default: false
- label: 'Long date format'
name: 'dateFormat'
widget: 'string'
hint: 'Default: January 2, 2006 at 3:04 PM UTC. Docs: https://github.com/cstate/cstate/wiki/Customization#changing-date-formats-v30'
default: 'January 2, 2006 at 3:04 PM UTC'
- label: 'Short date format'
name: 'shortDateFormat'
widget: 'string'
hint: 'Default: 15:04 UTC — Jan 2. Docs: https://github.com/cstate/cstate/wiki/Customization#changing-date-formats-v30'
default: '15:04 UTC — Jan 2'
# Design site title color toggle in v4.0.1
- label: 'Site title text color'
hint: 'This is irrelevant, if you use a logo in your header.'
name: 'headerTextColor'
widget: 'select'
default: 'white'
options:
- { label: "Black", value: "black" }
- { label: "White", value: "white" }
# Design toggles
- label: 'Use large header design'
name: 'useLargeHeaderDesign'
widget: 'boolean'
hint: 'What header design should we use? https://github.com/cstate/cstate/wiki/Customization#changing-header'
required: false
default: false
- label: 'Show logo'
name: 'useLogo'
widget: 'boolean'
required: false
default: true
- label: 'Disable dark mode'
hint: 'If your OS and browser supports prefers-color-scheme and the user opted into a dark mode, the status page will be darker. Some color choices may be overriden.'
name: 'disableDarkMode'
widget: 'boolean'
required: false
default: false
- label: 'Logo image'
hint: 'Upload your logo here. If the logo option is switched off, this will not show.'
name: 'logo'
widget: 'image'
# Description
- label: 'Site description'
hint: 'This is the description that is shown on the footer and meta tags.'
name: 'description'
widget: 'text'
default: 'We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.'
# Incidents per page
- label: 'Incident posts shown in one page'
name: 'incidentPostsPerPage'
hint: ''
widget: 'number'
valueType: 'int'
min: 1
max: 100
default: 10
# Incidents history
- label: 'Should the incident history be hidden?'
name: 'disableIncidentHistory'
hint: 'By disabling the incident history, you also disable the RSS feed. To ensure no incidents are shown, you should delete them after they are resolved. This option overrides any other options that tailor your incident historys look.'
widget: 'boolean'
default: false
# Incidents view format
- label: 'Should the incident history be sorted by year or month?'
name: 'incidentHistoryFormat'
hint: 'Enabling sorting disables pagination. More: https://github.com/cstate/cstate/wiki/Customization#enable-sorting--archives-by-year-or-month-v40'
widget: 'select'
options:
- { label: "Show by year", value: "yearly" }
- { label: "Show by month", value: "monthly" }
- { label: "No sorting; enable pagination", value: "none" }
# Brand color
- label: 'Header: always keep brand color the same'
name: 'alwaysKeepBrandColor'
hint: 'You may choose whether the brand color should stay unchanged once there are disruptions or outages on the header.'
widget: 'boolean'
default: true
# Colors
- label: 'Site HEX color: Brand'
hint: 'Use any color type, even rgb() works. We recommend HEX: #123456. Default: #0a0c0f'
name: 'brand'
widget: 'string'
default: '#0a0c0f'
- label: 'Site HEX color: Operational / OK'
hint: 'Use any color type, even rgb() works. We recommend HEX: #123456. Default: #008000'
name: 'ok'
widget: 'string'
default: '#008000'
- label: 'Site HEX color: Disrupted'
hint: 'Use any color type, even rgb() works. We recommend HEX: #123456. Default: #cc4400'
name: 'disrupted'
widget: 'string'
default: '#cc4400'
- label: 'Site HEX color: Down / Offline / Major'
hint: 'Use any color type, even rgb() works. We recommend HEX: #123456. Default: #e60000'
name: 'down'
widget: 'string'
default: '#e60000'
- label: 'Site HEX color: Notice'
hint: 'Use any color type, even rgb() works. We recommend HEX: #123456. Default: #24478f'
name: 'notice'
widget: 'string'
default: '#24478f'
# Google Analytics
- label: 'Google Analytics tracking code'
hint: 'By default, cState does not use Google Analytics. If you choose to use it, you may change the placeholder code below to your own and thereby enable the tracking service. If you set the value back to UA-00000000-1, the code will once again be removed.'
name: 'googleAnalytics'
widget: 'string'
default: 'UA-00000000-1'
# Enable Custom HTML
- label: 'Enable custom HTML'
name: 'enableCustomHTML'
widget: 'boolean'
default: 'false'

90
admin/index.html Normal file
View File

@ -0,0 +1,90 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>cState Admin</title>
</head>
<body>
<!--
To easily manage your status on Netlify,
much like on WordPress, you need to keep
this directory. Platforms which do not
support Netlify CMS do not need this
/admin/ directory.
-->
<script>console.log('You are using cState. The version can be looked at from the console on the homepage or incidents view. https://github.com/cstate')</script>
<script src="https://identity.netlify.com/v1/netlify-identity-widget.js"></script>
<script src="https://unpkg.com/netlify-cms@^2.0.0/dist/netlify-cms.js"></script>
<script>
var IssuePreview = createClass({
render: function() {
var entry = this.props.entry;
var layoutPostDate = entry.getIn(['data', 'date']);
var layoutPostDateEnd = entry.getIn(['data', 'resolvedWhen']);
var resultOfStateProps = {"class": "warning"};
var resultOfState = 'This incident has not yet been resolved.';
if (entry.getIn(['data', 'resolved']) === true) {
var resultOfStateProps = {"class": "green"};
var resultOfState = 'This incident has been resolved.';
}
if (entry.getIn(['data', 'informational']) === true) {
var resultOfStateProps = {"class": "green"};
var resultOfState = '';
}
return h('div', {},
h('h1', {}, entry.getIn(['data', 'title'])),
h('p', {},
h('strong', resultOfStateProps, resultOfState)
),
h('div', {"className": "text"}, this.props.widgetFor('body'))
);
}
});
CMS.registerPreviewTemplate("issues", IssuePreview, { raw: true });
const previewStyles = `
html,
body {
padding: 16px;
color: #444;
background: #fff;
font: 100%/1.5 BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
h1 {
line-height: 1;
margin: 0;
color: #000;
font-weight: normal;
font-size: 40px;
font-family: "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
small {
margin-top: 12px;
color: #666;
font-variant: small-caps;
display: block;
}
.text {
padding-top: 12px;
border-top: 1px solid #ccc;
}
.green { color: #228B22; }
.red { color: #DC143C; }
.warning { color: #EE7600; }
`;
CMS.registerPreviewStyle(previewStyles, { raw: true });
</script>
</body>
</html>

810
affected/api/index.html Normal file
View File

@ -0,0 +1,810 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.">
<title>API | DISROOT</title>
<link rel="canonical" href="https://example.com/affected/api/">
<link rel="alternate" type="application/json" href="https://example.com/affected/api/index.json" title="DISROOT" />
<link rel="alternate" type="application/rss+xml" href="https://example.com/affected/api/index.xml" title="DISROOT" />
<link rel="alternate" type="image/svg+xml" href="https://example.com/affected/api/index.svg" title="DISROOT" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#0a0c0f">
<script>
var themeBrandColor = '#0a0c0f';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #0a0c0f;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="default list">
<header>
<div class="contain">
<a href="https://example.com">← Go back to <em>DISROOT</em></a>
<div class="padding"></div>
<div class="padding"></div>
<h1 class="clean">API</h1>
<p class="bold">The guts of the application.</p>
<p class="bold">
<em>
Recently, based on average data, it looks like this system has gone down for about
41
minutes at a time.
</em>
</p>
<small class="faded">4 entries, newest to oldest</small>
<div class="padding"></div>
<hr class="clean">
</div>
</header>
<div class="contain contain--more" id="incidents">
<a href="https://example.com/issues/2019-10-08-testing-new-pipeline/" class="issue no-underline">
<small class="date float-right relative-time" title="Oct 5 16:24:00 2019 UTC">
October 5, 2019 at 4:24 PM UTC
</small>
<h3>
New Pipeline Rollout
</h3>
<div class="ok">
Resolved after
34m
of downtime
</div>
</a>
<a href="https://example.com/issues/2018-05-25-us-east-conn-issues/" class="issue no-underline">
<small class="date float-right relative-time" title="Apr 25 04:13:00 2018 UTC">
April 25, 2018 at 4:13 AM UTC
</small>
<h3>
US East Connection Issues
</h3>
<div class="faded">
Resolved in under a minute
</div>
</a>
<a href="https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/" class="issue no-underline">
<small class="date float-right relative-time" title="Apr 13 15:54:00 2018 UTC">
April 13, 2018 at 3:54 PM UTC
</small>
<h3>
Unavailable Guilds &amp; Connection Issues
</h3>
<div class="warning">
Resolved after
1h
36m of downtime
</div>
</a>
<a href="https://example.com/issues/2018-01-17-sending-dms-impacted/" class="issue no-underline">
<small class="date float-right relative-time" title="Dec 17 16:24:00 2017 UTC">
December 17, 2017 at 4:24 PM UTC
</small>
<h3>
Issues Sending DMs
</h3>
<div class="ok">
Resolved after
34m
of downtime
</div>
</a>
<div class="padding"></div>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; DISROOT, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://example.com/index.xml" class="no-underline">to all updates</a>
or <a href="https://example.com/affected/api/index.xml" class="no-underline">only this feed (API)</a>
</small>
</p>
</div>
</div>
</body>
</html>

69
affected/api/index.json Normal file
View File

@ -0,0 +1,69 @@
{
"is": "system",
"title": "API",
"permalink": "https://example.com/affected/api/",
"status": "ok",
"pages": [
{
"is": "issue",
"title": "New Pipeline Rollout",
"createdAt": "2019-10-05 16:24:00 +0000 UTC",
"lastMod": "2021-04-17 14:19:08 +0300 +0300",
"permalink": "https://example.com/issues/2019-10-08-testing-new-pipeline/",
"severity": "disrupted",
"resolved": true,
"informational": false,
"resolvedAt": "2019-10-05 16:58:00",
"affected": ["API"],
"filename": "2019-10-08-testing-new-pipeline.md"
}
,
{
"is": "issue",
"title": "US East Connection Issues",
"createdAt": "2018-04-25 04:13:00 +0000 UTC",
"lastMod": "2019-12-21 21:27:28 +0200 +0200",
"permalink": "https://example.com/issues/2018-05-25-us-east-conn-issues/",
"severity": "down",
"resolved": true,
"informational": false,
"resolvedAt": "2018-04-25 04:13:59",
"affected": ["API", "Media Proxy", "Gateway"],
"filename": "2018-05-25-us-east-conn-issues.md"
}
,
{
"is": "issue",
"title": "Unavailable Guilds & Connection Issues",
"createdAt": "2018-04-13 15:54:00 +0000 UTC",
"lastMod": "2020-02-29 19:16:59 +0200 +0200",
"permalink": "https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/",
"severity": "down",
"resolved": true,
"informational": false,
"resolvedAt": "2018-04-13 17:30:00",
"affected": ["API", "Media Proxy"],
"filename": "2018-04-13-unavailable-guilds-connection-issues.md"
}
,
{
"is": "issue",
"title": "Issues Sending DMs",
"createdAt": "2017-12-17 16:24:00 +0000 UTC",
"lastMod": "2019-12-21 21:27:28 +0200 +0200",
"permalink": "https://example.com/issues/2018-01-17-sending-dms-impacted/",
"severity": "disrupted",
"resolved": true,
"informational": false,
"resolvedAt": "2017-12-17 16:58:00",
"affected": ["API"],
"filename": "2018-01-17-sending-dms-impacted.md"
}
]
}

19
affected/api/index.svg Normal file
View File

@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="2em" width="18ex" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<clipPath id="a">
<rect width="100%" height="100%" rx="3" fill="#fff"/>
</clipPath>
<g clip-path="url(#a)" fill="#fff" >
<rect x="0" y="0" width="100%" height="100%" fill="#555" />
<rect x="5ex" y="0" height="100%" width="100%" fill="#008000"/>
<rect x="0" y="0" width="100%" height="100%" fill="url(#b)"/>
<text x="1ex" y="15" fill="#010101" fill-opacity=".3">API</text>
<text x="1ex" y="14">API</text>
<text x="6ex" y="15" fill="#010101" fill-opacity=".3">Operational</text>
<text x="6ex" y="14">Operational</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 915 B

93
affected/api/index.xml Normal file
View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<link rel="alternate" type="text/html" href="https://example.com"/>
<title>API on DISROOT</title>
<link>https://example.com/affected/api/</link>
<description>Incident history</description>
<generator>github.com/cstate</generator>
<language>en</language>
<lastBuildDate>2019-10-05T16:24:00+00:00</lastBuildDate>
<updated>2019-10-05T16:24:00+00:00</updated>
<atom:link href="https://example.com/affected/api/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>[Resolved] New Pipeline Rollout</title>
<link>https://example.com/issues/2019-10-08-testing-new-pipeline/</link>
<pubDate>Sat, 05 Oct 2019 16:24:00 +0000</pubDate>
<guid>https://example.com/issues/2019-10-08-testing-new-pipeline/</guid>
<category>2019-10-05 16:58:00</category>
<description>There may be disruptions in the rollout.</description>
<content type="html">&lt;p&gt;There may be disruptions in the rollout.&lt;/p&gt;
</content>
</item>
<item>
<title>[Resolved] US East Connection Issues</title>
<link>https://example.com/issues/2018-05-25-us-east-conn-issues/</link>
<pubDate>Wed, 25 Apr 2018 04:13:00 +0000</pubDate>
<guid>https://example.com/issues/2018-05-25-us-east-conn-issues/</guid>
<category>2018-04-25 04:13:59</category>
<description>Resolved - We believe all users experiencing issues have been able to connect at this time. (05:54 UTC — May 25) Monitoring - We believe the connectivity issues are being caused by an isolated ISP issue. We&amp;rsquo;ve had reports that swapping to Google DNS servers (see here; https://developers.google.com/speed/public-dns/docs/using) resolves the problem for users. (04:40 UTC — May 25) Investigating - We&amp;rsquo;re aware of reports that users are experiencing connection issues on the East coast of the United States.</description>
<content type="html">&lt;p&gt;&lt;em&gt;Resolved&lt;/em&gt; -
We believe all users experiencing issues have been able to connect at this time.
&lt;span class=&#34;faded&#34;&gt;(05:54 UTC — May 25)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Monitoring&lt;/em&gt; - We believe the connectivity issues are being caused by an isolated ISP issue. We&amp;rsquo;ve had reports that swapping to Google DNS servers (see here; &lt;a href=&#34;https://developers.google.com/speed/public-dns/docs/using&#34;&gt;https://developers.google.com/speed/public-dns/docs/using&lt;/a&gt;) resolves the problem for users.
&lt;span class=&#34;faded&#34;&gt;(04:40 UTC — May 25)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Investigating&lt;/em&gt; - We&amp;rsquo;re aware of reports that users are experiencing connection issues on the East coast of the United States. We&amp;rsquo;re currently investigating these issues, and apologize for any inconvenience it may be causing you.
&lt;span class=&#34;faded&#34;&gt;(04:13 UTC — May 25)&lt;/span&gt;
&lt;/p&gt;
</content>
</item>
<item>
<title>[Resolved] Unavailable Guilds &amp; Connection Issues</title>
<link>https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/</link>
<pubDate>Fri, 13 Apr 2018 15:54:00 +0000</pubDate>
<guid>https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/</guid>
<category>2018-04-13 17:30:00</category>
<description>Post-mortem
At approximately 14:01, a Redis instance acting as the primary for a highly-available cluster used by our API services was migrated automatically by Googles Cloud Platform. This migration caused the node to incorrectly drop offline, forcing the cluster to rebalance and trigger known issues with the way our API instances handle Redis failover. After resolving this partial outage, unnoticed issues on other services caused a cascading failure through Example Chat Apps real time system.</description>
<content type="html">&lt;p&gt;&lt;em&gt;Post-mortem&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;At approximately 14:01, a Redis instance acting as the primary for a highly-available cluster used by our API services was migrated automatically by Googles Cloud Platform. This migration caused the node to incorrectly drop offline, forcing the cluster to rebalance and trigger known issues with the way our API instances handle Redis failover. After resolving this partial outage, unnoticed issues on other services caused a cascading failure through Example Chat Apps real time system. These issues caused enough critical impact that Example Chat Apps engineering team was forced to fully restart the service, reconnecting millions of clients over a period of 20 minutes.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt; - A fix has been implemented and we are monitoring the results. Looks like this has been fixed.
&lt;span class=&#34;faded&#34;&gt;(17:30 UTC — Apr 13)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Monitoring&lt;/em&gt; - After hitting the ole reboot button Example Chat App is now recovering. We&amp;rsquo;re going to continue to monitor as everyone reconnects.
&lt;span class=&#34;faded&#34;&gt;(16:50 UTC — Apr 13)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Investigating&lt;/em&gt; - We&amp;rsquo;re aware of users experiencing unavailable guilds and issues when attempting to connect. We&amp;rsquo;re currently investigating.
&lt;span class=&#34;faded&#34;&gt;(15:54 UTC — Apr 13)&lt;/span&gt;
&lt;/p&gt;
</content>
</item>
<item>
<title>[Resolved] Issues Sending DMs</title>
<link>https://example.com/issues/2018-01-17-sending-dms-impacted/</link>
<pubDate>Sun, 17 Dec 2017 16:24:00 +0000</pubDate>
<guid>https://example.com/issues/2018-01-17-sending-dms-impacted/</guid>
<category>2017-12-17 16:58:00</category>
<description>Update - This incident has been resolved.
Investigating - We&amp;rsquo;re aware of an issue affecting sending DMs and viewing online friends. We&amp;rsquo;re online and working on a resolution.</description>
<content type="html">&lt;p&gt;&lt;em&gt;Update&lt;/em&gt; - This incident has been resolved.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Investigating&lt;/em&gt; - We&amp;rsquo;re aware of an issue affecting sending DMs and viewing online friends. We&amp;rsquo;re online and working on a resolution.&lt;/p&gt;
</content>
</item>
</channel>
</rss>

View File

@ -0,0 +1 @@
<!DOCTYPE html><html><head><title>https://example.com/affected/api/</title><link rel="canonical" href="https://example.com/affected/api/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://example.com/affected/api/" /></head></html>

664
affected/gateway/index.html Normal file
View File

@ -0,0 +1,664 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.">
<title>Gateway | DISROOT</title>
<link rel="canonical" href="https://example.com/affected/gateway/">
<link rel="alternate" type="application/json" href="https://example.com/affected/gateway/index.json" title="DISROOT" />
<link rel="alternate" type="application/rss+xml" href="https://example.com/affected/gateway/index.xml" title="DISROOT" />
<link rel="alternate" type="image/svg+xml" href="https://example.com/affected/gateway/index.svg" title="DISROOT" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#0a0c0f">
<script>
var themeBrandColor = '#0a0c0f';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #0a0c0f;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="default list">
<header>
<div class="contain">
<a href="https://example.com">← Go back to <em>DISROOT</em></a>
<div class="padding"></div>
<div class="padding"></div>
<h1 class="clean">Gateway</h1>
<p class="bold">
<em>
Recently, based on average data, it looks like this system has gone down for about
0
minutes at a time.
</em>
</p>
<small class="faded">1 entries, newest to oldest</small>
<div class="padding"></div>
<hr class="clean">
</div>
</header>
<div class="contain contain--more" id="incidents">
<a href="https://example.com/issues/2018-05-25-us-east-conn-issues/" class="issue no-underline">
<small class="date float-right relative-time" title="Apr 25 04:13:00 2018 UTC">
April 25, 2018 at 4:13 AM UTC
</small>
<h3>
US East Connection Issues
</h3>
<div class="faded">
Resolved in under a minute
</div>
</a>
<div class="padding"></div>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; DISROOT, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://example.com/index.xml" class="no-underline">to all updates</a>
or <a href="https://example.com/affected/gateway/index.xml" class="no-underline">only this feed (Gateway)</a>
</small>
</p>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,27 @@
{
"is": "system",
"title": "Gateway",
"permalink": "https://example.com/affected/gateway/",
"status": "ok",
"pages": [
{
"is": "issue",
"title": "US East Connection Issues",
"createdAt": "2018-04-25 04:13:00 +0000 UTC",
"lastMod": "2019-12-21 21:27:28 +0200 +0200",
"permalink": "https://example.com/issues/2018-05-25-us-east-conn-issues/",
"severity": "down",
"resolved": true,
"informational": false,
"resolvedAt": "2018-04-25 04:13:59",
"affected": ["API", "Media Proxy", "Gateway"],
"filename": "2018-05-25-us-east-conn-issues.md"
}
]
}

View File

@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="2em" width="22ex" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<clipPath id="a">
<rect width="100%" height="100%" rx="3" fill="#fff"/>
</clipPath>
<g clip-path="url(#a)" fill="#fff" >
<rect x="0" y="0" width="100%" height="100%" fill="#555" />
<rect x="9ex" y="0" height="100%" width="100%" fill="#008000"/>
<rect x="0" y="0" width="100%" height="100%" fill="url(#b)"/>
<text x="1ex" y="15" fill="#010101" fill-opacity=".3">Gateway</text>
<text x="1ex" y="14">Gateway</text>
<text x="10ex" y="15" fill="#010101" fill-opacity=".3">Operational</text>
<text x="10ex" y="14">Operational</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 925 B

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<link rel="alternate" type="text/html" href="https://example.com"/>
<title>Gateway on DISROOT</title>
<link>https://example.com/affected/gateway/</link>
<description>Incident history</description>
<generator>github.com/cstate</generator>
<language>en</language>
<lastBuildDate>2018-04-25T04:13:00+00:00</lastBuildDate>
<updated>2018-04-25T04:13:00+00:00</updated>
<atom:link href="https://example.com/affected/gateway/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>[Resolved] US East Connection Issues</title>
<link>https://example.com/issues/2018-05-25-us-east-conn-issues/</link>
<pubDate>Wed, 25 Apr 2018 04:13:00 +0000</pubDate>
<guid>https://example.com/issues/2018-05-25-us-east-conn-issues/</guid>
<category>2018-04-25 04:13:59</category>
<description>Resolved - We believe all users experiencing issues have been able to connect at this time. (05:54 UTC — May 25) Monitoring - We believe the connectivity issues are being caused by an isolated ISP issue. We&amp;rsquo;ve had reports that swapping to Google DNS servers (see here; https://developers.google.com/speed/public-dns/docs/using) resolves the problem for users. (04:40 UTC — May 25) Investigating - We&amp;rsquo;re aware of reports that users are experiencing connection issues on the East coast of the United States.</description>
<content type="html">&lt;p&gt;&lt;em&gt;Resolved&lt;/em&gt; -
We believe all users experiencing issues have been able to connect at this time.
&lt;span class=&#34;faded&#34;&gt;(05:54 UTC — May 25)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Monitoring&lt;/em&gt; - We believe the connectivity issues are being caused by an isolated ISP issue. We&amp;rsquo;ve had reports that swapping to Google DNS servers (see here; &lt;a href=&#34;https://developers.google.com/speed/public-dns/docs/using&#34;&gt;https://developers.google.com/speed/public-dns/docs/using&lt;/a&gt;) resolves the problem for users.
&lt;span class=&#34;faded&#34;&gt;(04:40 UTC — May 25)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Investigating&lt;/em&gt; - We&amp;rsquo;re aware of reports that users are experiencing connection issues on the East coast of the United States. We&amp;rsquo;re currently investigating these issues, and apologize for any inconvenience it may be causing you.
&lt;span class=&#34;faded&#34;&gt;(04:13 UTC — May 25)&lt;/span&gt;
&lt;/p&gt;
</content>
</item>
</channel>
</rss>

View File

@ -0,0 +1 @@
<!DOCTYPE html><html><head><title>https://example.com/affected/gateway/</title><link rel="canonical" href="https://example.com/affected/gateway/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://example.com/affected/gateway/" /></head></html>

656
affected/index.html Normal file
View File

@ -0,0 +1,656 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.">
<title>Affected | Disroot State</title>
<link rel="canonical" href="https://state.disroot.org/affected/">
<link rel="alternate" type="application/rss+xml" href="https://state.disroot.org/affected/index.xml" title="Disroot State" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#50162D">
<script>
var themeBrandColor = '#50162D';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #50162D;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="default list">
<header>
<div class="contain">
<a href="https://state.disroot.org">← Go back to <em>Disroot State</em></a>
<div class="padding"></div>
<div class="padding"></div>
<h1 class="clean">Affected</h1>
<p class="bold">
<em>
</em>
</p>
<small class="faded">0 entries, newest to oldest</small>
<div class="padding"></div>
<hr class="clean">
</div>
</header>
<div class="contain contain--more" id="incidents">
<div class="padding"></div>
<h3>Is it the calm before the storm?</h3>
<p>This status page has no logged incidents. This may be because the status page owner (or owners) have recently set up their status page, have had no downtime, or have not logged any downtime.</p>
<div class="padding"></div>
<div class="padding"></div>
<div class="padding"></div>
<div class="padding"></div>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; Disroot State, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://state.disroot.org/index.xml" class="no-underline">to all updates</a>
or <a href="https://state.disroot.org/affected/index.xml" class="no-underline">only this feed (Affected)</a>
</small>
</p>
</div>
</div>
</body>
</html>

17
affected/index.xml Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<link rel="alternate" type="text/html" href="https://state.disroot.org"/>
<title>Affected on Disroot State</title>
<link>https://state.disroot.org/affected/</link>
<description>Incident history</description>
<generator>github.com/cstate</generator>
<language>en</language>
<atom:link href="https://state.disroot.org/affected/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

View File

@ -0,0 +1,714 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.">
<title>Media Proxy | DISROOT</title>
<link rel="canonical" href="https://example.com/affected/media-proxy/">
<link rel="alternate" type="application/json" href="https://example.com/affected/media-proxy/index.json" title="DISROOT" />
<link rel="alternate" type="application/rss+xml" href="https://example.com/affected/media-proxy/index.xml" title="DISROOT" />
<link rel="alternate" type="image/svg+xml" href="https://example.com/affected/media-proxy/index.svg" title="DISROOT" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#0a0c0f">
<script>
var themeBrandColor = '#0a0c0f';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #0a0c0f;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="default list">
<header>
<div class="contain">
<a href="https://example.com">← Go back to <em>DISROOT</em></a>
<div class="padding"></div>
<div class="padding"></div>
<h1 class="clean">Media Proxy</h1>
<p class="bold">This is the service responsible for serving images, audio, and video. It is reliant on our CDN.</p>
<p class="bold">
<em>
Recently, based on average data, it looks like this system has gone down for about
48
minutes at a time.
</em>
</p>
<small class="faded">2 entries, newest to oldest</small>
<div class="padding"></div>
<hr class="clean">
</div>
</header>
<div class="contain contain--more" id="incidents">
<a href="https://example.com/issues/2018-05-25-us-east-conn-issues/" class="issue no-underline">
<small class="date float-right relative-time" title="Apr 25 04:13:00 2018 UTC">
April 25, 2018 at 4:13 AM UTC
</small>
<h3>
US East Connection Issues
</h3>
<div class="faded">
Resolved in under a minute
</div>
</a>
<a href="https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/" class="issue no-underline">
<small class="date float-right relative-time" title="Apr 13 15:54:00 2018 UTC">
April 13, 2018 at 3:54 PM UTC
</small>
<h3>
Unavailable Guilds &amp; Connection Issues
</h3>
<div class="warning">
Resolved after
1h
36m of downtime
</div>
</a>
<div class="padding"></div>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; DISROOT, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://example.com/index.xml" class="no-underline">to all updates</a>
or <a href="https://example.com/affected/media-proxy/index.xml" class="no-underline">only this feed (Media Proxy)</a>
</small>
</p>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,41 @@
{
"is": "system",
"title": "Media Proxy",
"permalink": "https://example.com/affected/media-proxy/",
"status": "ok",
"pages": [
{
"is": "issue",
"title": "US East Connection Issues",
"createdAt": "2018-04-25 04:13:00 +0000 UTC",
"lastMod": "2019-12-21 21:27:28 +0200 +0200",
"permalink": "https://example.com/issues/2018-05-25-us-east-conn-issues/",
"severity": "down",
"resolved": true,
"informational": false,
"resolvedAt": "2018-04-25 04:13:59",
"affected": ["API", "Media Proxy", "Gateway"],
"filename": "2018-05-25-us-east-conn-issues.md"
}
,
{
"is": "issue",
"title": "Unavailable Guilds & Connection Issues",
"createdAt": "2018-04-13 15:54:00 +0000 UTC",
"lastMod": "2020-02-29 19:16:59 +0200 +0200",
"permalink": "https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/",
"severity": "down",
"resolved": true,
"informational": false,
"resolvedAt": "2018-04-13 17:30:00",
"affected": ["API", "Media Proxy"],
"filename": "2018-04-13-unavailable-guilds-connection-issues.md"
}
]
}

View File

@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="2em" width="26ex" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<clipPath id="a">
<rect width="100%" height="100%" rx="3" fill="#fff"/>
</clipPath>
<g clip-path="url(#a)" fill="#fff" >
<rect x="0" y="0" width="100%" height="100%" fill="#555" />
<rect x="13ex" y="0" height="100%" width="100%" fill="#008000"/>
<rect x="0" y="0" width="100%" height="100%" fill="url(#b)"/>
<text x="1ex" y="15" fill="#010101" fill-opacity=".3">Media Proxy</text>
<text x="1ex" y="14">Media Proxy</text>
<text x="14ex" y="15" fill="#010101" fill-opacity=".3">Operational</text>
<text x="14ex" y="14">Operational</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 934 B

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<link rel="alternate" type="text/html" href="https://example.com"/>
<title>Media Proxy on DISROOT</title>
<link>https://example.com/affected/media-proxy/</link>
<description>Incident history</description>
<generator>github.com/cstate</generator>
<language>en</language>
<lastBuildDate>2018-04-25T04:13:00+00:00</lastBuildDate>
<updated>2018-04-25T04:13:00+00:00</updated>
<atom:link href="https://example.com/affected/media-proxy/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>[Resolved] US East Connection Issues</title>
<link>https://example.com/issues/2018-05-25-us-east-conn-issues/</link>
<pubDate>Wed, 25 Apr 2018 04:13:00 +0000</pubDate>
<guid>https://example.com/issues/2018-05-25-us-east-conn-issues/</guid>
<category>2018-04-25 04:13:59</category>
<description>Resolved - We believe all users experiencing issues have been able to connect at this time. (05:54 UTC — May 25) Monitoring - We believe the connectivity issues are being caused by an isolated ISP issue. We&amp;rsquo;ve had reports that swapping to Google DNS servers (see here; https://developers.google.com/speed/public-dns/docs/using) resolves the problem for users. (04:40 UTC — May 25) Investigating - We&amp;rsquo;re aware of reports that users are experiencing connection issues on the East coast of the United States.</description>
<content type="html">&lt;p&gt;&lt;em&gt;Resolved&lt;/em&gt; -
We believe all users experiencing issues have been able to connect at this time.
&lt;span class=&#34;faded&#34;&gt;(05:54 UTC — May 25)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Monitoring&lt;/em&gt; - We believe the connectivity issues are being caused by an isolated ISP issue. We&amp;rsquo;ve had reports that swapping to Google DNS servers (see here; &lt;a href=&#34;https://developers.google.com/speed/public-dns/docs/using&#34;&gt;https://developers.google.com/speed/public-dns/docs/using&lt;/a&gt;) resolves the problem for users.
&lt;span class=&#34;faded&#34;&gt;(04:40 UTC — May 25)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Investigating&lt;/em&gt; - We&amp;rsquo;re aware of reports that users are experiencing connection issues on the East coast of the United States. We&amp;rsquo;re currently investigating these issues, and apologize for any inconvenience it may be causing you.
&lt;span class=&#34;faded&#34;&gt;(04:13 UTC — May 25)&lt;/span&gt;
&lt;/p&gt;
</content>
</item>
<item>
<title>[Resolved] Unavailable Guilds &amp; Connection Issues</title>
<link>https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/</link>
<pubDate>Fri, 13 Apr 2018 15:54:00 +0000</pubDate>
<guid>https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/</guid>
<category>2018-04-13 17:30:00</category>
<description>Post-mortem
At approximately 14:01, a Redis instance acting as the primary for a highly-available cluster used by our API services was migrated automatically by Googles Cloud Platform. This migration caused the node to incorrectly drop offline, forcing the cluster to rebalance and trigger known issues with the way our API instances handle Redis failover. After resolving this partial outage, unnoticed issues on other services caused a cascading failure through Example Chat Apps real time system.</description>
<content type="html">&lt;p&gt;&lt;em&gt;Post-mortem&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;At approximately 14:01, a Redis instance acting as the primary for a highly-available cluster used by our API services was migrated automatically by Googles Cloud Platform. This migration caused the node to incorrectly drop offline, forcing the cluster to rebalance and trigger known issues with the way our API instances handle Redis failover. After resolving this partial outage, unnoticed issues on other services caused a cascading failure through Example Chat Apps real time system. These issues caused enough critical impact that Example Chat Apps engineering team was forced to fully restart the service, reconnecting millions of clients over a period of 20 minutes.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt; - A fix has been implemented and we are monitoring the results. Looks like this has been fixed.
&lt;span class=&#34;faded&#34;&gt;(17:30 UTC — Apr 13)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Monitoring&lt;/em&gt; - After hitting the ole reboot button Example Chat App is now recovering. We&amp;rsquo;re going to continue to monitor as everyone reconnects.
&lt;span class=&#34;faded&#34;&gt;(16:50 UTC — Apr 13)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Investigating&lt;/em&gt; - We&amp;rsquo;re aware of users experiencing unavailable guilds and issues when attempting to connect. We&amp;rsquo;re currently investigating.
&lt;span class=&#34;faded&#34;&gt;(15:54 UTC — Apr 13)&lt;/span&gt;
&lt;/p&gt;
</content>
</item>
</channel>
</rss>

View File

@ -0,0 +1 @@
<!DOCTYPE html><html><head><title>https://example.com/affected/media-proxy/</title><link rel="canonical" href="https://example.com/affected/media-proxy/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://example.com/affected/media-proxy/" /></head></html>

View File

@ -0,0 +1 @@
<!DOCTYPE html><html><head><title>https://example.com/affected/</title><link rel="canonical" href="https://example.com/affected/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://example.com/affected/" /></head></html>

BIN
favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

BIN
favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 B

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

1
img/README.md Normal file
View File

@ -0,0 +1 @@
For users of Netlify CMS with cState, `static/img` is the media folder in the config.

1782
index.html Normal file

File diff suppressed because it is too large Load Diff

305
index.json Normal file
View File

@ -0,0 +1,305 @@
{
"is": "index",
"cStateVersion": "5.3",
"apiVersion": "2.0",
"title": "Disroot State",
"languageCodeHTML": "en",
"languageCode": "en",
"baseURL": "https://state.disroot.org",
"description": "We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.",
"summaryStatus": "ok",
"categories": [
{
"name": "Apps",
"hideTitle": false,
"closedByDefault": true
}
,
{
"name": "NextCloud Apps",
"hideTitle": false,
"closedByDefault": true
}
,
{
"name": "Uncategorized",
"hideTitle": true,
"closedByDefault": false
}
],
"systems": [
{
"name": "Calls",
"description": "Disroot Calls - powered by Jitsi - version 2.0",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Mail",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Webmail 01",
"description": "Disroot Webmail - powered by SnappyMail - version 2.16.3",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Webmail 02",
"description": "Disroot Webmail - powered by Roundcube - version v1.5.2",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Cloud",
"description": "Disroot Cloud - powered by Nextcloud - version 23.0.6",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "XMPP",
"description": "Disroot XMPP Service - powered by Prosody - version "trunk"",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Forum",
"description": "Disroot Forum Service - powered by Discourse - version 2.8.0.beta6",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Pad",
"description": "Disroot Etherpad Service - powered by Etherpad-lite - version 1.8.18",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Bin",
"description": "Disroot Bin Service - powered by PrivateBin - version 1.4.0",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Upload",
"description": "Disroot Upload Service - powered by Lufi.io - version 0.05.18",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Searx",
"description": "Disroot Search Engine Service - powered by Searxng - version 2022.06.20",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Git",
"description": "Disroot Git Service - powered by Gitea - version 1.16.8",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Cryptpad",
"description": "Disroot Cryptpad Service - powered by Cryptpad - version 5.0.0",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Taiga",
"description": "Disroot Board Service - powered by Taiga.io - version 4.0.0",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "User Password management",
"description": "Disroot Signup and password management Service - powered by PWM",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Disroot.org Website",
"description": "Disroot Website - powered by Grav - version 1.6.16",
"category": "Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Nextcloud Files",
"category": "NextCloud Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Nextcloud Webmail",
"category": "NextCloud Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Nextcloud Gallery",
"category": "NextCloud Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Next Nextcloud Calendar",
"category": "NextCloud Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Nextcloud Contacts",
"category": "NextCloud Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Nextcloud Tasks",
"category": "NextCloud Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Nextcloud Notes",
"category": "NextCloud Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Nextcloud Video Calls",
"category": "NextCloud Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Next Nextcloud Bookmarks",
"category": "NextCloud Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Nextcloud Circles",
"category": "NextCloud Apps",
"status": "ok",
"unresolvedIssues": []
},
{
"name": "Nextcloud End-to-End Encryption",
"category": "NextCloud Apps",
"status": "ok",
"unresolvedIssues": []
}
],
"buildDate": "2022-07-27",
"buildTime": "17:05",
"buildTimezone": "UTC",
"colorBrand": "#50162D",
"colorOk": "#008000",
"colorDisrupted": "#cc4400",
"colorDown": "#e60000",
"colorNotice": "#24478f",
"alwaysKeepBrandColor": "true",
"logo": "https://state.disroot.org/disrootorg.png",
"googleAnalytics": "UA-00000000-1"
}

19
index.svg Normal file
View File

@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="2em" width="28ex" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<clipPath id="a">
<rect width="100%" height="100%" rx="3" fill="#fff"/>
</clipPath>
<g clip-path="url(#a)" fill="#fff" >
<rect x="0" y="0" width="100%" height="100%" fill="#555" />
<rect x="15ex" y="0" height="100%" width="100%" fill="#008000"/>
<rect x="0" y="0" width="100%" height="100%" fill="url(#b)"/>
<text x="1ex" y="15" fill="#010101" fill-opacity=".3">Disroot State</text>
<text x="1ex" y="14">Disroot State</text>
<text x="16ex" y="15" fill="#010101" fill-opacity=".3">Operational</text>
<text x="16ex" y="14">Operational</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 938 B

19
index.xml Normal file
View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Disroot State</title>
<link>https://state.disroot.org/</link>
<description>Incident history</description>
<generator>github.com/cstate</generator>
<language>en</language>
<atom:link href="https://state.disroot.org/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

View File

@ -0,0 +1,645 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Update - This incident has been resolved.
Investigating - We&rsquo;re aware of an issue affecting sending DMs and viewing online friends. We&rsquo;re online and working on a resolution.">
<title>Issues Sending DMs | DISROOT</title>
<link rel="canonical" href="https://example.com/issues/2018-01-17-sending-dms-impacted/">
<link rel="alternate" type="application/json" href="https://example.com/issues/2018-01-17-sending-dms-impacted/index.json" title="DISROOT" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#0a0c0f">
<script>
var themeBrandColor = '#0a0c0f';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #0a0c0f;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="issues single">
<div class="contain">
<a href="https://example.com">← Go back to <em>DISROOT</em></a>
</div>
<div class="contain">
<div class="article">
<h1 class="clean">
Issues Sending DMs
</h1>
<small class="date">
December 17, 2017 at 4:24 PM UTC
</small>
<p><small>
<a href="/affected/api/" class="tag no-underline">API</a>
</small></p>
<div class="ok tooltip">
<strong>
Resolved after
34m
of downtime.
</strong>
<span class="tooltip__text">
December 17, 2017 at 4:58 PM UTC
</span>
</div>
<hr>
<p><em>Update</em> - This incident has been resolved.</p>
<p><em>Investigating</em> - We&rsquo;re aware of an issue affecting sending DMs and viewing online friends. We&rsquo;re online and working on a resolution.</p>
</div>
<div class="padding"></div>
</div>
<div class="contain center">
<p>Last updated:
December 21, 2019 at 7:27 PM UTC
</p>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; DISROOT, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://example.com/index.xml" class="no-underline">to all updates</a>
</small>
</p>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,13 @@
{
"is": "issue",
"title": "Issues Sending DMs",
"createdAt": "2017-12-17 16:24:00 +0000 UTC",
"lastMod": "2019-12-21 21:27:28 +0200 +0200",
"permalink": "https://example.com/issues/2018-01-17-sending-dms-impacted/",
"severity": "disrupted",
"resolved": true,
"informational": false,
"resolvedAt": "2017-12-17 16:58:00",
"affected": ["API"],
"filename": "2018-01-17-sending-dms-impacted.md"
}

View File

@ -0,0 +1,660 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Post-mortem
At approximately 14:01, a Redis instance acting as the primary for a highly-available cluster used by our API services was migrated automatically by Googles Cloud Platform. This migration caused the node to incorrectly drop offline, forcing the cluster to rebalance and trigger known issues with the way our API instances handle Redis failover. After resolving this partial outage, unnoticed issues on other services caused a cascading failure through Example Chat Apps real time system.">
<title>Unavailable Guilds &amp; Connection Issues | DISROOT</title>
<link rel="canonical" href="https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/">
<link rel="alternate" type="application/json" href="https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/index.json" title="DISROOT" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#0a0c0f">
<script>
var themeBrandColor = '#0a0c0f';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #0a0c0f;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="issues single">
<div class="contain">
<a href="https://example.com">← Go back to <em>DISROOT</em></a>
</div>
<div class="contain">
<div class="article">
<h1 class="clean">
Unavailable Guilds &amp; Connection Issues
</h1>
<small class="date">
April 13, 2018 at 3:54 PM UTC
</small>
<p><small>
<a href="/affected/api/" class="tag no-underline">API</a>
<a href="/affected/media-proxy/" class="tag no-underline">Media Proxy</a>
</small></p>
<div class="warning tooltip">
<strong>
Resolved after
1h
36m of downtime.
</strong>
<span class="tooltip__text">
April 13, 2018 at 5:30 PM UTC
</span>
</div>
<hr>
<p><em>Post-mortem</em></p>
<p>At approximately 14:01, a Redis instance acting as the primary for a highly-available cluster used by our API services was migrated automatically by Googles Cloud Platform. This migration caused the node to incorrectly drop offline, forcing the cluster to rebalance and trigger known issues with the way our API instances handle Redis failover. After resolving this partial outage, unnoticed issues on other services caused a cascading failure through Example Chat Apps real time system. These issues caused enough critical impact that Example Chat Apps engineering team was forced to fully restart the service, reconnecting millions of clients over a period of 20 minutes.</p>
<hr>
<p><em>Update</em> - A fix has been implemented and we are monitoring the results. Looks like this has been fixed.
<span class="faded">(17:30 UTC — Apr 13)</span>
</p>
<p><em>Monitoring</em> - After hitting the ole reboot button Example Chat App is now recovering. We&rsquo;re going to continue to monitor as everyone reconnects.
<span class="faded">(16:50 UTC — Apr 13)</span>
</p>
<p><em>Investigating</em> - We&rsquo;re aware of users experiencing unavailable guilds and issues when attempting to connect. We&rsquo;re currently investigating.
<span class="faded">(15:54 UTC — Apr 13)</span>
</p>
</div>
<div class="padding"></div>
</div>
<div class="contain center">
<p>Last updated:
February 29, 2020 at 5:16 PM UTC
</p>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; DISROOT, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://example.com/index.xml" class="no-underline">to all updates</a>
</small>
</p>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,13 @@
{
"is": "issue",
"title": "Unavailable Guilds & Connection Issues",
"createdAt": "2018-04-13 15:54:00 +0000 UTC",
"lastMod": "2020-02-29 19:16:59 +0200 +0200",
"permalink": "https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/",
"severity": "down",
"resolved": true,
"informational": false,
"resolvedAt": "2018-04-13 17:30:00",
"affected": ["API", "Media Proxy"],
"filename": "2018-04-13-unavailable-guilds-connection-issues.md"
}

View File

@ -0,0 +1,646 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Resolved - We believe all users experiencing issues have been able to connect at this time. (05:54 UTC — May 25) Monitoring - We believe the connectivity issues are being caused by an isolated ISP issue. We&rsquo;ve had reports that swapping to Google DNS servers (see here; https://developers.google.com/speed/public-dns/docs/using) resolves the problem for users. (04:40 UTC — May 25) Investigating - We&rsquo;re aware of reports that users are experiencing connection issues on the East coast of the United States.">
<title>US East Connection Issues | DISROOT</title>
<link rel="canonical" href="https://example.com/issues/2018-05-25-us-east-conn-issues/">
<link rel="alternate" type="application/json" href="https://example.com/issues/2018-05-25-us-east-conn-issues/index.json" title="DISROOT" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#0a0c0f">
<script>
var themeBrandColor = '#0a0c0f';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #0a0c0f;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="issues single">
<div class="contain">
<a href="https://example.com">← Go back to <em>DISROOT</em></a>
</div>
<div class="contain">
<div class="article">
<h1 class="clean">
US East Connection Issues
</h1>
<small class="date">
April 25, 2018 at 4:13 AM UTC
</small>
<p><small>
<a href="/affected/api/" class="tag no-underline">API</a>
<a href="/affected/media-proxy/" class="tag no-underline">Media Proxy</a>
<a href="/affected/gateway/" class="tag no-underline">Gateway</a>
</small></p>
<div class="faded">
<strong>
Resolved in under a minute.
</strong>
</div>
<hr>
<p><em>Resolved</em> -
We believe all users experiencing issues have been able to connect at this time.
<span class="faded">(05:54 UTC — May 25)</span>
</p>
<p><em>Monitoring</em> - We believe the connectivity issues are being caused by an isolated ISP issue. We&rsquo;ve had reports that swapping to Google DNS servers (see here; <a href="https://developers.google.com/speed/public-dns/docs/using">https://developers.google.com/speed/public-dns/docs/using</a>) resolves the problem for users.
<span class="faded">(04:40 UTC — May 25)</span>
</p>
<p><em>Investigating</em> - We&rsquo;re aware of reports that users are experiencing connection issues on the East coast of the United States. We&rsquo;re currently investigating these issues, and apologize for any inconvenience it may be causing you.
<span class="faded">(04:13 UTC — May 25)</span>
</p>
</div>
<div class="padding"></div>
</div>
<div class="contain center">
<p>Last updated:
December 21, 2019 at 7:27 PM UTC
</p>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; DISROOT, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://example.com/index.xml" class="no-underline">to all updates</a>
</small>
</p>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,13 @@
{
"is": "issue",
"title": "US East Connection Issues",
"createdAt": "2018-04-25 04:13:00 +0000 UTC",
"lastMod": "2019-12-21 21:27:28 +0200 +0200",
"permalink": "https://example.com/issues/2018-05-25-us-east-conn-issues/",
"severity": "down",
"resolved": true,
"informational": false,
"resolvedAt": "2018-04-25 04:13:59",
"affected": ["API", "Media Proxy", "Gateway"],
"filename": "2018-05-25-us-east-conn-issues.md"
}

View File

@ -0,0 +1,643 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="There may be disruptions in the rollout.">
<title>New Pipeline Rollout | DISROOT</title>
<link rel="canonical" href="https://example.com/issues/2019-10-08-testing-new-pipeline/">
<link rel="alternate" type="application/json" href="https://example.com/issues/2019-10-08-testing-new-pipeline/index.json" title="DISROOT" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#0a0c0f">
<script>
var themeBrandColor = '#0a0c0f';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #0a0c0f;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="issues single">
<div class="contain">
<a href="https://example.com">← Go back to <em>DISROOT</em></a>
</div>
<div class="contain">
<div class="article">
<h1 class="clean">
New Pipeline Rollout
</h1>
<small class="date">
October 5, 2019 at 4:24 PM UTC
</small>
<p><small>
<a href="/affected/api/" class="tag no-underline">API</a>
</small></p>
<div class="ok tooltip">
<strong>
Resolved after
34m
of downtime.
</strong>
<span class="tooltip__text">
October 5, 2019 at 4:58 PM UTC
</span>
</div>
<hr>
<p>There may be disruptions in the rollout.</p>
</div>
<div class="padding"></div>
</div>
<div class="contain center">
<p>Last updated:
April 17, 2021 at 11:19 AM UTC
</p>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; DISROOT, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://example.com/index.xml" class="no-underline">to all updates</a>
</small>
</p>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,13 @@
{
"is": "issue",
"title": "New Pipeline Rollout",
"createdAt": "2019-10-05 16:24:00 +0000 UTC",
"lastMod": "2021-04-17 14:19:08 +0300 +0300",
"permalink": "https://example.com/issues/2019-10-08-testing-new-pipeline/",
"severity": "disrupted",
"resolved": true,
"informational": false,
"resolvedAt": "2019-10-05 16:58:00",
"affected": ["API"],
"filename": "2019-10-08-testing-new-pipeline.md"
}

View File

@ -0,0 +1,660 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Post-mortem
At approximately 14:01, a Redis instance acting as the primary for a highly-available cluster used by our API services was migrated automatically by Googles Cloud Platform. This migration caused the node to incorrectly drop offline, forcing the cluster to rebalance and trigger known issues with the way our API instances handle Redis failover. After resolving this partial outage, unnoticed issues on other services caused a cascading failure through Example Chat Apps real time system.">
<title>Unavailable Guilds &amp; Connection Issues | Test4</title>
<link rel="canonical" href="https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/">
<link rel="alternate" type="application/json" href="https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/index.json" title="Test4" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#0a0c0f">
<script>
var themeBrandColor = '#0a0c0f';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #0a0c0f;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="issues single">
<div class="contain">
<a href="https://example.com">← Go back to <em>Test4</em></a>
</div>
<div class="contain">
<div class="article">
<h1 class="clean">
Unavailable Guilds &amp; Connection Issues
</h1>
<small class="date">
April 13, 2018 at 3:54 PM UTC
</small>
<p><small>
<a href="/affected/api/" class="tag no-underline">API</a>
<a href="/affected/media-proxy/" class="tag no-underline">Media Proxy</a>
</small></p>
<div class="warning tooltip">
<strong>
Resolved after
1h
36m of downtime.
</strong>
<span class="tooltip__text">
April 13, 2018 at 5:30 PM UTC
</span>
</div>
<hr>
<p><em>Post-mortem</em></p>
<p>At approximately 14:01, a Redis instance acting as the primary for a highly-available cluster used by our API services was migrated automatically by Googles Cloud Platform. This migration caused the node to incorrectly drop offline, forcing the cluster to rebalance and trigger known issues with the way our API instances handle Redis failover. After resolving this partial outage, unnoticed issues on other services caused a cascading failure through Example Chat Apps real time system. These issues caused enough critical impact that Example Chat Apps engineering team was forced to fully restart the service, reconnecting millions of clients over a period of 20 minutes.</p>
<hr>
<p><em>Update</em> - A fix has been implemented and we are monitoring the results. Looks like this has been fixed.
<span class="faded">(17:30 UTC — Apr 13)</span>
</p>
<p><em>Monitoring</em> - After hitting the ole reboot button Example Chat App is now recovering. We&rsquo;re going to continue to monitor as everyone reconnects.
<span class="faded">(16:50 UTC — Apr 13)</span>
</p>
<p><em>Investigating</em> - We&rsquo;re aware of users experiencing unavailable guilds and issues when attempting to connect. We&rsquo;re currently investigating.
<span class="faded">(15:54 UTC — Apr 13)</span>
</p>
</div>
<div class="padding"></div>
</div>
<div class="contain center">
<p>Last updated:
February 29, 2020 at 5:16 PM UTC
</p>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; Test4, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://example.com/index.xml" class="no-underline">to all updates</a>
</small>
</p>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,13 @@
{
"is": "issue",
"title": "Test",
"createdAt": "2022-02-13 15:54:00 +0000 UTC",
"lastMod": "2021-04-29 19:16:59 +0200 +0200",
"permalink": "https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/",
"severity": "down",
"resolved": true,
"informational": false,
"resolvedAt": "2022-05-13 17:30:00",
"affected": ["API", "Media Proxy"],
"filename": "2022-04-13-test.md"
}

View File

@ -0,0 +1,615 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="We will shut down our network at midnight UTC on Feb 24. This does not affect the current status.">
<title>Maintenance Announcement | DISROOT</title>
<link rel="canonical" href="https://example.com/issues/2024-02-24-maintenance-window/">
<link rel="alternate" type="application/json" href="https://example.com/issues/2024-02-24-maintenance-window/index.json" title="DISROOT" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#0a0c0f">
<script>
var themeBrandColor = '#0a0c0f';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #0a0c0f;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="issues single">
<div class="contain">
<a href="https://example.com">← Go back to <em>DISROOT</em></a>
</div>
<div class="contain">
<div class="article">
<h1 class="clean">
Maintenance Announcement
</h1>
<small class="date">
February 24, 2024 at 10:35 AM UTC
</small>
<p><small>
</small></p>
<hr>
<p>We will shut down our network at midnight UTC on Feb 24. This does not affect the current status.</p>
</div>
<div class="padding"></div>
</div>
<div class="contain center">
<p>Last updated:
October 10, 2021 at 2:02 PM UTC
</p>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; DISROOT, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://example.com/index.xml" class="no-underline">to all updates</a>
</small>
</p>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,13 @@
{
"is": "issue",
"title": "Maintenance Announcement",
"createdAt": "2024-02-24 10:35:00 +0000 UTC",
"lastMod": "2021-10-10 17:02:38 +0300 +0300",
"permalink": "https://example.com/issues/2024-02-24-maintenance-window/",
"severity": "<no value>",
"resolved": false,
"informational": true,
"resolvedAt": "<no value>",
"affected": [],
"filename": "2024-02-24-maintenance-window.md"
}

View File

@ -0,0 +1,617 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="There is a new feature in cState version 4 that lets you make what are called informational posts. The main difference is that there will be no Unresolved or Resolved in under a minute text on the pages.
This is essentially a page with a date and title that shows up in the incident history.">
<title>Testing New cState Features | DISROOT</title>
<link rel="canonical" href="https://example.com/issues/i-testing-cstate-functions/">
<link rel="alternate" type="application/json" href="https://example.com/issues/i-testing-cstate-functions/index.json" title="DISROOT" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#0a0c0f">
<script>
var themeBrandColor = '#0a0c0f';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #0a0c0f;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="issues single">
<div class="contain">
<a href="https://example.com">← Go back to <em>DISROOT</em></a>
</div>
<div class="contain">
<div class="article">
<h1 class="clean">
Testing New cState Features
</h1>
<small class="date">
October 4, 2019 at 6:05 PM UTC
</small>
<p><small>
</small></p>
<hr>
<p>There is a new feature in cState version 4 that lets you make what are called <em>informational</em> posts. The main difference is that there will be no <em>Unresolved</em> or <em>Resolved in under a minute</em> text on the pages.</p>
<p>This is essentially a page with a date and title that shows up in the incident history.</p>
</div>
<div class="padding"></div>
</div>
<div class="contain center">
<p>Last updated:
April 17, 2021 at 11:19 AM UTC
</p>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; DISROOT, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://example.com/index.xml" class="no-underline">to all updates</a>
</small>
</p>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,13 @@
{
"is": "issue",
"title": "Testing New cState Features",
"createdAt": "2019-10-04 18:05:00 +0000 UTC",
"lastMod": "2021-04-17 14:19:08 +0300 +0300",
"permalink": "https://example.com/issues/i-testing-cstate-functions/",
"severity": "<no value>",
"resolved": false,
"informational": true,
"resolvedAt": "<no value>",
"affected": [],
"filename": "i-testing-cstate-functions.md"
}

857
issues/index.html Normal file
View File

@ -0,0 +1,857 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.">
<title>Issues | DISROOT</title>
<link rel="canonical" href="https://example.com/issues/">
<link rel="alternate" type="application/json" href="https://example.com/issues/index.json" title="DISROOT" />
<link rel="alternate" type="application/rss+xml" href="https://example.com/issues/index.xml" title="DISROOT" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#0a0c0f">
<script>
var themeBrandColor = '#0a0c0f';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #0a0c0f;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="default list">
<header>
<div class="contain">
<a href="https://example.com">← Go back to <em>DISROOT</em></a>
<div class="padding"></div>
<div class="padding"></div>
<h1 class="clean">Issues</h1>
<p class="bold">
<em>
Recently, based on average data, it looks like this system has gone down for about
41
minutes at a time.
</em>
</p>
<small class="faded">6 entries, newest to oldest</small>
<div class="padding"></div>
<hr class="clean">
</div>
</header>
<div class="contain contain--more" id="incidents">
<a href="https://example.com/issues/2024-02-24-maintenance-window/" class="issue no-underline">
<small class="date float-right relative-time" title="Feb 24 10:35:00 2024 UTC">
February 24, 2024 at 10:35 AM UTC
</small>
<h3>
Maintenance Announcement &nbsp;
</h3>
<span class="faded">We will shut down our network at midnight UTC on Feb 24. This does not affect the current status.
</span>
</a>
<a href="https://example.com/issues/2019-10-08-testing-new-pipeline/" class="issue no-underline">
<small class="date float-right relative-time" title="Oct 5 16:24:00 2019 UTC">
October 5, 2019 at 4:24 PM UTC
</small>
<h3>
New Pipeline Rollout
</h3>
<div class="ok">
Resolved after
34m
of downtime
</div>
</a>
<a href="https://example.com/issues/i-testing-cstate-functions/" class="issue no-underline">
<small class="date float-right relative-time" title="Oct 4 18:05:00 2019 UTC">
October 4, 2019 at 6:05 PM UTC
</small>
<h3>
Testing New cState Features &nbsp;
</h3>
<span class="faded">There is a new feature in cState version 4 that lets you make what are called informational posts. The main difference is that there will be no Unresolved or Resolved in under a minute text on the …
</span>
</a>
<a href="https://example.com/issues/2018-05-25-us-east-conn-issues/" class="issue no-underline">
<small class="date float-right relative-time" title="Apr 25 04:13:00 2018 UTC">
April 25, 2018 at 4:13 AM UTC
</small>
<h3>
US East Connection Issues
</h3>
<div class="faded">
Resolved in under a minute
</div>
</a>
<a href="https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/" class="issue no-underline">
<small class="date float-right relative-time" title="Apr 13 15:54:00 2018 UTC">
April 13, 2018 at 3:54 PM UTC
</small>
<h3>
Unavailable Guilds &amp; Connection Issues
</h3>
<div class="warning">
Resolved after
1h
36m of downtime
</div>
</a>
<a href="https://example.com/issues/2018-01-17-sending-dms-impacted/" class="issue no-underline">
<small class="date float-right relative-time" title="Dec 17 16:24:00 2017 UTC">
December 17, 2017 at 4:24 PM UTC
</small>
<h3>
Issues Sending DMs
</h3>
<div class="ok">
Resolved after
34m
of downtime
</div>
</a>
<div class="padding"></div>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; DISROOT, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://example.com/index.xml" class="no-underline">to all updates</a>
or <a href="https://example.com/issues/index.xml" class="no-underline">only this feed (Issues)</a>
</small>
</p>
</div>
</div>
</body>
</html>

92
issues/index.json Normal file
View File

@ -0,0 +1,92 @@
{
"is": "issues",
"title": "Issues",
"baseURL": "https://example.com",
"description": "",
"pages": [
{
"is": "issue",
"title": "Maintenance Announcement",
"createdAt": "2024-02-24 10:35:00 +0000 UTC",
"lastMod": "2021-10-10 17:02:38 +0300 +0300",
"permalink": "https://example.com/issues/2024-02-24-maintenance-window/",
"severity": "<no value>",
"resolved": false,
"informational": true,
"resolvedAt": "<no value>",
"affected": [],
"filename": "2024-02-24-maintenance-window.md"
}
,
{
"is": "issue",
"title": "New Pipeline Rollout",
"createdAt": "2019-10-05 16:24:00 +0000 UTC",
"lastMod": "2021-04-17 14:19:08 +0300 +0300",
"permalink": "https://example.com/issues/2019-10-08-testing-new-pipeline/",
"severity": "disrupted",
"resolved": true,
"informational": false,
"resolvedAt": "2019-10-05 16:58:00",
"affected": ["API"],
"filename": "2019-10-08-testing-new-pipeline.md"
}
,
{
"is": "issue",
"title": "Testing New cState Features",
"createdAt": "2019-10-04 18:05:00 +0000 UTC",
"lastMod": "2021-04-17 14:19:08 +0300 +0300",
"permalink": "https://example.com/issues/i-testing-cstate-functions/",
"severity": "<no value>",
"resolved": false,
"informational": true,
"resolvedAt": "<no value>",
"affected": [],
"filename": "i-testing-cstate-functions.md"
}
,
{
"is": "issue",
"title": "US East Connection Issues",
"createdAt": "2018-04-25 04:13:00 +0000 UTC",
"lastMod": "2019-12-21 21:27:28 +0200 +0200",
"permalink": "https://example.com/issues/2018-05-25-us-east-conn-issues/",
"severity": "down",
"resolved": true,
"informational": false,
"resolvedAt": "2018-04-25 04:13:59",
"affected": ["API", "Media Proxy", "Gateway"],
"filename": "2018-05-25-us-east-conn-issues.md"
}
,
{
"is": "issue",
"title": "Unavailable Guilds & Connection Issues",
"createdAt": "2018-04-13 15:54:00 +0000 UTC",
"lastMod": "2020-02-29 19:16:59 +0200 +0200",
"permalink": "https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/",
"severity": "down",
"resolved": true,
"informational": false,
"resolvedAt": "2018-04-13 17:30:00",
"affected": ["API", "Media Proxy"],
"filename": "2018-04-13-unavailable-guilds-connection-issues.md"
}
,
{
"is": "issue",
"title": "Issues Sending DMs",
"createdAt": "2017-12-17 16:24:00 +0000 UTC",
"lastMod": "2019-12-21 21:27:28 +0200 +0200",
"permalink": "https://example.com/issues/2018-01-17-sending-dms-impacted/",
"severity": "disrupted",
"resolved": true,
"informational": false,
"resolvedAt": "2017-12-17 16:58:00",
"affected": ["API"],
"filename": "2018-01-17-sending-dms-impacted.md"
}
]
}

117
issues/index.xml Normal file
View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<link rel="alternate" type="text/html" href="https://example.com"/>
<title>Issues on DISROOT</title>
<link>https://example.com/issues/</link>
<description>Incident history</description>
<generator>github.com/cstate</generator>
<language>en</language>
<lastBuildDate>2024-02-24T10:35:00+00:00</lastBuildDate>
<updated>2024-02-24T10:35:00+00:00</updated>
<atom:link href="https://example.com/issues/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Maintenance Announcement</title>
<link>https://example.com/issues/2024-02-24-maintenance-window/</link>
<pubDate>Sat, 24 Feb 2024 10:35:00 +0000</pubDate>
<guid>https://example.com/issues/2024-02-24-maintenance-window/</guid>
<category></category>
<description>We will shut down our network at midnight UTC on Feb 24. This does not affect the current status.</description>
<content type="html">&lt;p&gt;We will shut down our network at midnight UTC on Feb 24. This does not affect the current status.&lt;/p&gt;
</content>
</item>
<item>
<title>[Resolved] New Pipeline Rollout</title>
<link>https://example.com/issues/2019-10-08-testing-new-pipeline/</link>
<pubDate>Sat, 05 Oct 2019 16:24:00 +0000</pubDate>
<guid>https://example.com/issues/2019-10-08-testing-new-pipeline/</guid>
<category>2019-10-05 16:58:00</category>
<description>There may be disruptions in the rollout.</description>
<content type="html">&lt;p&gt;There may be disruptions in the rollout.&lt;/p&gt;
</content>
</item>
<item>
<title>Testing New cState Features</title>
<link>https://example.com/issues/i-testing-cstate-functions/</link>
<pubDate>Fri, 04 Oct 2019 18:05:00 +0000</pubDate>
<guid>https://example.com/issues/i-testing-cstate-functions/</guid>
<category></category>
<description>There is a new feature in cState version 4 that lets you make what are called informational posts. The main difference is that there will be no Unresolved or Resolved in under a minute text on the pages.
This is essentially a page with a date and title that shows up in the incident history.</description>
<content type="html">&lt;p&gt;There is a new feature in cState version 4 that lets you make what are called &lt;em&gt;informational&lt;/em&gt; posts. The main difference is that there will be no &lt;em&gt;Unresolved&lt;/em&gt; or &lt;em&gt;Resolved in under a minute&lt;/em&gt; text on the pages.&lt;/p&gt;
&lt;p&gt;This is essentially a page with a date and title that shows up in the incident history.&lt;/p&gt;
</content>
</item>
<item>
<title>[Resolved] US East Connection Issues</title>
<link>https://example.com/issues/2018-05-25-us-east-conn-issues/</link>
<pubDate>Wed, 25 Apr 2018 04:13:00 +0000</pubDate>
<guid>https://example.com/issues/2018-05-25-us-east-conn-issues/</guid>
<category>2018-04-25 04:13:59</category>
<description>Resolved - We believe all users experiencing issues have been able to connect at this time. (05:54 UTC — May 25) Monitoring - We believe the connectivity issues are being caused by an isolated ISP issue. We&amp;rsquo;ve had reports that swapping to Google DNS servers (see here; https://developers.google.com/speed/public-dns/docs/using) resolves the problem for users. (04:40 UTC — May 25) Investigating - We&amp;rsquo;re aware of reports that users are experiencing connection issues on the East coast of the United States.</description>
<content type="html">&lt;p&gt;&lt;em&gt;Resolved&lt;/em&gt; -
We believe all users experiencing issues have been able to connect at this time.
&lt;span class=&#34;faded&#34;&gt;(05:54 UTC — May 25)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Monitoring&lt;/em&gt; - We believe the connectivity issues are being caused by an isolated ISP issue. We&amp;rsquo;ve had reports that swapping to Google DNS servers (see here; &lt;a href=&#34;https://developers.google.com/speed/public-dns/docs/using&#34;&gt;https://developers.google.com/speed/public-dns/docs/using&lt;/a&gt;) resolves the problem for users.
&lt;span class=&#34;faded&#34;&gt;(04:40 UTC — May 25)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Investigating&lt;/em&gt; - We&amp;rsquo;re aware of reports that users are experiencing connection issues on the East coast of the United States. We&amp;rsquo;re currently investigating these issues, and apologize for any inconvenience it may be causing you.
&lt;span class=&#34;faded&#34;&gt;(04:13 UTC — May 25)&lt;/span&gt;
&lt;/p&gt;
</content>
</item>
<item>
<title>[Resolved] Unavailable Guilds &amp; Connection Issues</title>
<link>https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/</link>
<pubDate>Fri, 13 Apr 2018 15:54:00 +0000</pubDate>
<guid>https://example.com/issues/2018-04-13-unavailable-guilds-connection-issues/</guid>
<category>2018-04-13 17:30:00</category>
<description>Post-mortem
At approximately 14:01, a Redis instance acting as the primary for a highly-available cluster used by our API services was migrated automatically by Googles Cloud Platform. This migration caused the node to incorrectly drop offline, forcing the cluster to rebalance and trigger known issues with the way our API instances handle Redis failover. After resolving this partial outage, unnoticed issues on other services caused a cascading failure through Example Chat Apps real time system.</description>
<content type="html">&lt;p&gt;&lt;em&gt;Post-mortem&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;At approximately 14:01, a Redis instance acting as the primary for a highly-available cluster used by our API services was migrated automatically by Googles Cloud Platform. This migration caused the node to incorrectly drop offline, forcing the cluster to rebalance and trigger known issues with the way our API instances handle Redis failover. After resolving this partial outage, unnoticed issues on other services caused a cascading failure through Example Chat Apps real time system. These issues caused enough critical impact that Example Chat Apps engineering team was forced to fully restart the service, reconnecting millions of clients over a period of 20 minutes.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt; - A fix has been implemented and we are monitoring the results. Looks like this has been fixed.
&lt;span class=&#34;faded&#34;&gt;(17:30 UTC — Apr 13)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Monitoring&lt;/em&gt; - After hitting the ole reboot button Example Chat App is now recovering. We&amp;rsquo;re going to continue to monitor as everyone reconnects.
&lt;span class=&#34;faded&#34;&gt;(16:50 UTC — Apr 13)&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Investigating&lt;/em&gt; - We&amp;rsquo;re aware of users experiencing unavailable guilds and issues when attempting to connect. We&amp;rsquo;re currently investigating.
&lt;span class=&#34;faded&#34;&gt;(15:54 UTC — Apr 13)&lt;/span&gt;
&lt;/p&gt;
</content>
</item>
<item>
<title>[Resolved] Issues Sending DMs</title>
<link>https://example.com/issues/2018-01-17-sending-dms-impacted/</link>
<pubDate>Sun, 17 Dec 2017 16:24:00 +0000</pubDate>
<guid>https://example.com/issues/2018-01-17-sending-dms-impacted/</guid>
<category>2017-12-17 16:58:00</category>
<description>Update - This incident has been resolved.
Investigating - We&amp;rsquo;re aware of an issue affecting sending DMs and viewing online friends. We&amp;rsquo;re online and working on a resolution.</description>
<content type="html">&lt;p&gt;&lt;em&gt;Update&lt;/em&gt; - This incident has been resolved.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Investigating&lt;/em&gt; - We&amp;rsquo;re aware of an issue affecting sending DMs and viewing online friends. We&amp;rsquo;re online and working on a resolution.&lt;/p&gt;
</content>
</item>
</channel>
</rss>

1
issues/page/1/index.html Normal file
View File

@ -0,0 +1 @@
<!DOCTYPE html><html><head><title>https://example.com/issues/</title><link rel="canonical" href="https://example.com/issues/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://example.com/issues/" /></head></html>

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -0,0 +1,723 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Title here! This is an example page that demonstrates the capabilities of a Markdown page in cState.
You can use HTML if the file extension is .html, but this one is .md.
Let us dive in.
Paragraphs are separated by a blank line.
2nd paragraph. Italic, bold, and monospace. Itemized lists look like:
this one that one the other one Note that &mdash; not considering the asterisk &mdash; the actual text content starts at 4-columns in.">
<title>Example Page | Disroot State</title>
<link rel="canonical" href="https://state.disroot.org/pages/example-page/">
<link rel="alternate" type="application/json" href="https://state.disroot.org/pages/example-page/index.json" title="Disroot State" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#50162D">
<script>
var themeBrandColor = '#50162D';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #50162D;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="default single">
<div class="contain">
<a href="https://state.disroot.org">← Go back to <em>Disroot State</em></a>
<div class="padding"></div>
<h1 id="title-here">Title here!</h1>
<p>This is an example page that demonstrates the capabilities of a Markdown page in cState.</p>
<p>You can use HTML if the file extension is <code>.html</code>, but this one is <code>.md</code>.</p>
<p>Let us dive in.</p>
<p>Paragraphs are separated by a blank line.</p>
<p>2nd paragraph. <em>Italic</em>, <strong>bold</strong>, and <code>monospace</code>. Itemized lists
look like:</p>
<ul>
<li>this one</li>
<li>that one</li>
<li>the other one</li>
</ul>
<p>Note that &mdash; not considering the asterisk &mdash; the actual text
content starts at 4-columns in.</p>
<blockquote>
<p>Block quotes are
written like so.</p>
<p>They can span multiple paragraphs,
if you like.</p>
</blockquote>
<p>Use 3 dashes for an em-dash. Use 2 dashes for ranges (ex., &ldquo;it&rsquo;s all
in chapters 12&ndash;14&rdquo;). Three dots &hellip; will be converted to an ellipsis.
Unicode is supported. ☺</p>
<h2 id="an-h2-header">An h2 header</h2>
<p>Here&rsquo;s a numbered list:</p>
<ol>
<li>first item</li>
<li>second item</li>
<li>third item</li>
</ol>
<p>Note again how the actual text starts at 4 columns in (4 characters
from the left side). Here&rsquo;s a code sample:</p>
<pre><code># Let me re-iterate ...
for i in 1 .. 10 { do-something(i) }
</code></pre>
<p>As you probably guessed, indented 4 spaces. By the way, instead of
indenting the block, you can use delimited blocks, if you like:</p>
<pre><code>define foobar() {
print &quot;Welcome to flavor country!&quot;;
}
</code></pre><p>(which makes copying &amp; pasting easier). You can optionally mark the
delimited block for Pandoc to syntax highlight it:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python"><span style="color:#f92672">import</span> time
<span style="color:#75715e"># Quick, count to ten!</span>
<span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(<span style="color:#ae81ff">10</span>):
<span style="color:#75715e"># (but not *too* quick)</span>
time<span style="color:#f92672">.</span>sleep(<span style="color:#ae81ff">0.5</span>)
<span style="color:#66d9ef">print</span>(i)
</code></pre></div><h3 id="an-h3-header">An h3 header</h3>
<p>Now a nested list:</p>
<ol>
<li>
<p>First, get these ingredients:</p>
<ul>
<li>carrots</li>
<li>celery</li>
<li>lentils</li>
</ul>
</li>
<li>
<p>Boil some water.</p>
</li>
<li>
<p>Dump everything in the pot and follow
this algorithm:</p>
<pre><code>find wooden spoon
uncover pot
stir
cover pot
balance wooden spoon precariously on pot handle
wait 10 minutes
goto first step (or shut off burner when done)
</code></pre>
<p>Do not bump wooden spoon or it will fall.</p>
</li>
</ol>
<p>Notice again how text always lines up on 4-space indents (including
that last line which continues item 3 above).</p>
<p>Here&rsquo;s a link to <a href="http://foo.bar">a website</a>, to a <a href="local-doc.html">local
doc</a>, and to a <a href="#an-h2-header">section heading in the current
doc</a>. Here&rsquo;s a footnote <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>Tables can look like this:</p>
<table>
<thead>
<tr>
<th>Name Size Material Color</th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>All Business 9 leather brown</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Roundabout 10 hemp canvas natural</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Cinderella 11 glass transparent</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>Table: Shoes sizes, materials, and colors.</p>
<p>(The above is the caption for the table.) Pandoc also supports
multi-line tables:</p>
<hr>
<p>Keyword Text</p>
<hr>
<p>red Sunsets, apples, and
other red or reddish
things.</p>
<p>green Leaves, grass, frogs
and other things it&rsquo;s
not easy being.</p>
<hr>
<p>A horizontal rule follows.</p>
<hr>
<p>Here&rsquo;s a definition list:</p>
<p>apples<br>
: Good for making applesauce.</p>
<p>oranges<br>
: Citrus!</p>
<p>tomatoes<br>
: There&rsquo;s no &ldquo;e&rdquo; in tomatoe.</p>
<p>Again, text is indented 4 spaces. (Put a blank line between each
term and its definition to spread things out more.)</p>
<p>Here&rsquo;s a &ldquo;line block&rdquo; (note how whitespace is honored):</p>
<p>| Line one
| Line too
| Line tree</p>
<p>and images can be specified like so:</p>
<p><img src="https://via.placeholder.com/350x150" alt="example image" title="An exemplary image"></p>
<p>Inline math equation: $\omega = d\phi / dt$. Display
math should get its own line like so:</p>
<p>$$I = \int \rho R^{2} dV$$</p>
<p>And note that you can backslash-escape any punctuation characters
which you wish to be displayed literally, ex.: `foo`, *bar*, etc.</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>Some footnote text. <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; Disroot State, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://state.disroot.org/index.xml" class="no-underline">to all updates</a>
</small>
</p>
</div>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

658
pages/index.html Normal file
View File

@ -0,0 +1,658 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.">
<title>Pages | Disroot State</title>
<link rel="canonical" href="https://state.disroot.org/pages/">
<link rel="alternate" type="application/json" href="https://state.disroot.org/pages/index.json" title="Disroot State" />
<link rel="alternate" type="application/rss+xml" href="https://state.disroot.org/pages/index.xml" title="Disroot State" />
<meta name="generator" content="cState v5.3 - https://github.com/cstate/cstate">
<meta name="theme-color" content="#50162D">
<script>
var themeBrandColor = '#50162D';
var themeOkColor = '#008000';
var themeNoticeColor = '#24478f';
var themeDisruptedColor = '#cc4400';
var themeDownColor = '#e60000';
</script>
<style>
html, body {
margin: 0;
background: #fff;
color: #4d4d4d;
font: 100%/1.5 "Inter", "Inter UI", BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0,0,0, 0.25);
}
::selection { background: #B4D5FF; }
*, *:before, *:after {
box-sizing: inherit;
}
a {
text-decoration: none;
color: #000;
border-bottom: 1px dotted currentColor;
}
a:hover { border-bottom-style: solid; }
a:active { position: relative; top: 2px; }
hr {
border: 0;
border-bottom: 1px solid #ccc;
margin: 24px 0;
}
h1 {
font-size: 40px;
line-height: 1;
}
h2 { font-size: 26px; }
h3 { font-size: 20px; }
h4 { font-size: 18px; }
h1, h2, h4 {
font-weight: normal;
color: #000;
font-family: "Inter", "Inter UI", "Segoe UI", BlinkMacSystemFont, -apple-system, "San Francisco Display", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
letter-spacing: -0.4px;
}
h3 {
margin: 0;
color: #000;
}
img {
border: 0;
width: 100%;
height: auto;
}
.hidden { display: none; }
a.no-underline { border-bottom: 0; }
.headline { font-size: 20px; }
.bold { color: #000; }
.hinted { color: #6d6d6d; }
.faded { color: #6d6d6d; }
.clean { margin: 0; }
.ok { color: #008000; }
.warning { color: #cc4400; }
.error { color: #e60000; }
.contain {
max-width: 640px;
margin: 16px auto;
padding: 16px;
}
.contain--more { max-width: 680px; }
.center { text-align: center; }
.right { text-align: right; }
.padding-s { padding: 6px; }
.padding { padding: 12px; }
.clicky { cursor: pointer; }
.link-style { border: none; }
.span-icon {
float: right;
margin-left: 16px;
}
.js .category--open .category__closed-marker { display: none; }
.js .category--closed .components { display: none; }
.js .category--closed .category__open-marker { display: none; }
.js .hidden-with-js { display: none; }
.hide-without-js { display: none; }
.js span.hide-without-js { display: inline; }
.js div.hide-without-js { display: block; }
.date {
display: block;
margin-top: 12px;
color: #666;
font-variant: small-caps;
}
.tag {
display: inline-block;
padding: 4px 8px;
margin-right: 4px;
margin-bottom: 2px;
background: #eee;
}
.tag:hover { background: #ddd; }
.header {
padding: 8px 0;
background: #50162D;
}
.header a {
color: #fff;
font-size: 14px;
font-variant: small-caps;
}
.header a h1 { color: #fff; }
.header__logo img {
height: auto;
width: 320px;
}
.header__logo--small img {
height: auto;
width: 160px;
}
.header--large { padding: 16px; }
.header--large a { font-size: 20px; }
.footer {
padding: 10px;
background: #f5f5f5;
}
.footer__copyright {
display: block;
font-variant: small-caps;
}
.footer__copyright a, a.header__logo {
border-bottom: 0;
}
.summary {
padding: 16px;
color: #fff;
}
.summary__date:hover {
color: #ccc;
}
.summary__date:hover:after {
content: ' ⟳ ';
color: #fff;
}
.components {
border: 2px solid #ddd;
border-bottom: 0;
}
.component {
color: #000;
padding: 16px;
border-bottom: 2px solid #ddd;
}
.tooltip { cursor: pointer; position: relative; }
.tooltip__text { display: none; }
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
display: block;
position: absolute;
top: 0;
left: 24px;
background: #181818;
color: #fff;
z-index: 50;
padding: 8px;
border: 2px solid #242424;
font-size: 14px;
color: #ccc;
width: 320px;
height: auto;
}
@media (max-width: 640px) {
.tooltip:hover .tooltip__text,
.tooltip:active .tooltip__text {
width: 50vw;
}
}
.tabs { border-bottom: 1px solid #ccc; }
.tabs--inner { padding: 0 16px; margin: 0 auto; }
a.tab { display: inline-table; }
.tab--current {
border: 1px solid #ccc;
border-bottom-color: #fff;
padding: 12px 18px;
position: relative;
top: 1px;
}
.tab--other {
border: 0;
padding: 12px 18px;
position: relative;
top: 1px;
color: #757575;
}
.tab--other:hover { color: #000; }
.issue { display: block; padding: 14px 24px; }
.issue:hover, .category__head:hover { background: #f5f5f5; }
.issue:active, .category__head:active { background: #eee; }
.issue h3 { line-height: 1.25; }
.category__head { margin-top: 20px; }
.archive__head { padding: 20px; background: #f5f5f5; }
.status-ok .summary { background: #008000; }
.status-disrupted .summary, .change-header-color.status-disrupted .header { background: #cc4400; }
.status-down .summary, .change-header-color.status-down .header { background: #e60000; }
.status-notice .summary, .change-header-color.status-notice .header { background: #24478f; }
.announcement-box .padding {
padding: 16px;
}
.status-disrupted .announcement-box { border: 2px solid #cc4400; }
.status-down .announcement-box { border: 2px solid #e60000; }
.status-notice .announcement-box { border: 2px solid #24478f; }
.status-disrupted .announcement-box,
.status-down .announcement-box,
.status-notice .announcement-box { border-top: 0; }
.category--open .category-status { display: none; }
.component-status, .category-status { float: right; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #008000; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #cc4400; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #24478f; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #e60000; }
@media (min-width: 640px) {
.float-right {
float: right;
display: inline;
}
}
@media (prefers-color-scheme: dark) {
html, body { background: #181a1b; color: #ccc9c1; }
h1, h2, h3, h4, a, .bold { color: #fafafa; }
hr { border-bottom-color: #3d3d3d; }
.footer { background: #1b1d1e; }
.components {
border: 2px solid #ddd;
border-bottom: 0;
border-color: #3a3a3a;
}
.component {
border-bottom: 2px solid #ddd;
color: #e8e6e3;
border-bottom-color: #3a3a3a;
}
.tabs { border-bottom-color: #3d3d3d; }
.tab--current {
border-color: #3d3d3d;
border-bottom-color: #181a1b;
}
.tab--other { color: #757575; }
.tab--other:hover { color: #fff; }
.date { color: #c3bfb6; }
.tag, .archive__head { background-color: #1d1f20; }
.tag:hover { background: #222; }
.issue:hover,
.category__head:hover { background-color: #212121; }
.hinted, .faded { color: #c1bcb3; }
.error { color: #ff4242; }
.warning {color: #ffde7f; }
.ok { color: #7fff7f; }
.component[data-status="ok"] .component-status,
.category__head[data-status="ok"] .category-status
{ color: #7fff7f; }
.component[data-status="disrupted"] .component-status,
.category__head[data-status="disrupted"] .category-status
{ color: #ffde7f; }
.component[data-status="notice"] .component-status,
.category__head[data-status="notice"] .category-status
{ color: #83a4e8; }
.component[data-status="down"] .component-status,
.category__head[data-status="down"] .category-status
{ color: #ff8181; }
}
</style>
</head>
<body class="default list">
<header>
<div class="contain">
<a href="https://state.disroot.org">← Go back to <em>Disroot State</em></a>
<div class="padding"></div>
<div class="padding"></div>
<h1 class="clean">Pages</h1>
<p class="bold">
<em>
</em>
</p>
<small class="faded">1 entries, newest to oldest</small>
<div class="padding"></div>
<hr class="clean">
</div>
</header>
<div class="contain contain--more" id="incidents">
<div class="padding"></div>
</div>
<script type="text/javascript">
console.log('cState v5.3 - https://github.com/cstate/cstate');
document.getElementsByTagName('html')[0].className = 'js';
if (document.body.className === 'change-header-color') {
if (document.body.className === 'status-down') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDownColor);
} else if (document.body.className === 'status-disrupted') {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeDisruptedColor);
} else {
document.querySelector('meta[name=theme-color]').setAttribute('content', themeNoticeColor);
}
}
if (window.location.hash.match('access_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('invite_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('confirmation_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('email_change_token')) {
document.location.pathname = '/admin';
}
if (window.location.hash.match('recovery_token')) {
document.location.pathname = '/admin';
}
function toggleCategoryHead(el) {
if (el.parentNode.className == 'category category--open category--titled') {
el.parentNode.className = 'category category--closed category--titled';
} else {
el.parentNode.className = 'category category--open category--titled';
}
}
function timeSince(date) {
var seconds = Math.floor((new Date() - date) / 1000);
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + ' years';
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + ' months';
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + 'd';
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + 'h';
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + ' min';
}
if(Math.floor(seconds) < 0) {
return Math.floor(seconds);
}
return Math.floor(seconds) + 's';
}
function updateRelativeTimes() {
var elements = document.querySelectorAll('.relative-time');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var time = Date.parse(element.getAttribute('title'));
var html = element.getAttribute('data-time-prefix') || '';
if (!time) {
time = element.innerText;
element.setAttribute('title', time || new Date);
html += 'just now';
} else if (timeSince(time) < 0) {
html = element.innerText;
} else {
html += timeSince(time) + ' ago';
}
html += element.getAttribute('data-time-suffix') || '';
element.innerHTML = html.trim();
}
}
updateRelativeTimes();
setInterval(updateRelativeTimes, 5000);
</script>
<div class="footer">
<div class="contain">
<p><strong class="bold">&copy; Disroot State, 2022</strong>
&nbsp;&nbsp; <a href="#">Back to top</a>
</p>
<p>We continuously monitor the status of our services and if there are any interruptions, a note will be posted here.</p>
<small class="footer__copyright faded">Powered by <a href="https://github.com/cstate/cstate"><b>cState</b></a></small>
<hr>
<p class="hinted">
<small>
Subscribe via RSS —
<a href="https://state.disroot.org/index.xml" class="no-underline">to all updates</a>
or <a href="https://state.disroot.org/pages/index.xml" class="no-underline">only this feed (Pages)</a>
</small>
</p>
</div>
</div>
</body>
</html>

18
pages/index.json Normal file
View File

@ -0,0 +1,18 @@
{
"is": "pages",
"title": "Pages",
"baseURL": "https://state.disroot.org",
"description": "",
"pages": [
{
"is": "page",
"title": "Example Page",
"createdAt": "0001-01-01 00:00:00 +0000 UTC",
"lastMod": "2019-04-08 21:48:39 +0300 +0300",
"permalink": "https://state.disroot.org/pages/example-page/",
"filename": "example-page.md",
"summary": "Title here! This is an example page that demonstrates the capabilities of a Markdown page in cState.\nYou can use HTML if the file extension is .html, but this one is .md.\nLet us dive in.\nParagraphs are separated by a blank line.\n2nd paragraph. Italic, bold, and monospace. Itemized lists look like:\n this one that one the other one Note that \u0026mdash; not considering the asterisk \u0026mdash; the actual text content starts at 4-columns in."
}
]
}

187
pages/index.xml Normal file
View File

@ -0,0 +1,187 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<link rel="alternate" type="text/html" href="https://state.disroot.org"/>
<title>Pages on Disroot State</title>
<link>https://state.disroot.org/pages/</link>
<description>Incident history</description>
<generator>github.com/cstate</generator>
<language>en</language>
<atom:link href="https://state.disroot.org/pages/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Example Page</title>
<link>https://state.disroot.org/pages/example-page/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://state.disroot.org/pages/example-page/</guid>
<category></category>
<description>Title here! This is an example page that demonstrates the capabilities of a Markdown page in cState.
You can use HTML if the file extension is .html, but this one is .md.
Let us dive in.
Paragraphs are separated by a blank line.
2nd paragraph. Italic, bold, and monospace. Itemized lists look like:
this one that one the other one Note that &amp;mdash; not considering the asterisk &amp;mdash; the actual text content starts at 4-columns in.</description>
<content type="html">&lt;h1 id=&#34;title-here&#34;&gt;Title here!&lt;/h1&gt;
&lt;p&gt;This is an example page that demonstrates the capabilities of a Markdown page in cState.&lt;/p&gt;
&lt;p&gt;You can use HTML if the file extension is &lt;code&gt;.html&lt;/code&gt;, but this one is &lt;code&gt;.md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Let us dive in.&lt;/p&gt;
&lt;p&gt;Paragraphs are separated by a blank line.&lt;/p&gt;
&lt;p&gt;2nd paragraph. &lt;em&gt;Italic&lt;/em&gt;, &lt;strong&gt;bold&lt;/strong&gt;, and &lt;code&gt;monospace&lt;/code&gt;. Itemized lists
look like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;this one&lt;/li&gt;
&lt;li&gt;that one&lt;/li&gt;
&lt;li&gt;the other one&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that &amp;mdash; not considering the asterisk &amp;mdash; the actual text
content starts at 4-columns in.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Block quotes are
written like so.&lt;/p&gt;
&lt;p&gt;They can span multiple paragraphs,
if you like.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Use 3 dashes for an em-dash. Use 2 dashes for ranges (ex., &amp;ldquo;it&amp;rsquo;s all
in chapters 12&amp;ndash;14&amp;rdquo;). Three dots &amp;hellip; will be converted to an ellipsis.
Unicode is supported. ☺&lt;/p&gt;
&lt;h2 id=&#34;an-h2-header&#34;&gt;An h2 header&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s a numbered list:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;first item&lt;/li&gt;
&lt;li&gt;second item&lt;/li&gt;
&lt;li&gt;third item&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Note again how the actual text starts at 4 columns in (4 characters
from the left side). Here&amp;rsquo;s a code sample:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Let me re-iterate ...
for i in 1 .. 10 { do-something(i) }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you probably guessed, indented 4 spaces. By the way, instead of
indenting the block, you can use delimited blocks, if you like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define foobar() {
print &amp;quot;Welcome to flavor country!&amp;quot;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(which makes copying &amp;amp; pasting easier). You can optionally mark the
delimited block for Pandoc to syntax highlight it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; time
&lt;span style=&#34;color:#75715e&#34;&gt;# Quick, count to ten!&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;):
&lt;span style=&#34;color:#75715e&#34;&gt;# (but not *too* quick)&lt;/span&gt;
time&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sleep(&lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;)
&lt;span style=&#34;color:#66d9ef&#34;&gt;print&lt;/span&gt;(i)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;an-h3-header&#34;&gt;An h3 header&lt;/h3&gt;
&lt;p&gt;Now a nested list:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First, get these ingredients:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;carrots&lt;/li&gt;
&lt;li&gt;celery&lt;/li&gt;
&lt;li&gt;lentils&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Boil some water.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dump everything in the pot and follow
this algorithm:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find wooden spoon
uncover pot
stir
cover pot
balance wooden spoon precariously on pot handle
wait 10 minutes
goto first step (or shut off burner when done)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do not bump wooden spoon or it will fall.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Notice again how text always lines up on 4-space indents (including
that last line which continues item 3 above).&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a link to &lt;a href=&#34;http://foo.bar&#34;&gt;a website&lt;/a&gt;, to a &lt;a href=&#34;local-doc.html&#34;&gt;local
doc&lt;/a&gt;, and to a &lt;a href=&#34;#an-h2-header&#34;&gt;section heading in the current
doc&lt;/a&gt;. Here&amp;rsquo;s a footnote &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Tables can look like this:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name Size Material Color&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;All Business 9 leather brown&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Roundabout 10 hemp canvas natural&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cinderella 11 glass transparent&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Table: Shoes sizes, materials, and colors.&lt;/p&gt;
&lt;p&gt;(The above is the caption for the table.) Pandoc also supports
multi-line tables:&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Keyword Text&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;red Sunsets, apples, and
other red or reddish
things.&lt;/p&gt;
&lt;p&gt;green Leaves, grass, frogs
and other things it&amp;rsquo;s
not easy being.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;A horizontal rule follows.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Here&amp;rsquo;s a definition list:&lt;/p&gt;
&lt;p&gt;apples&lt;br&gt;
: Good for making applesauce.&lt;/p&gt;
&lt;p&gt;oranges&lt;br&gt;
: Citrus!&lt;/p&gt;
&lt;p&gt;tomatoes&lt;br&gt;
: There&amp;rsquo;s no &amp;ldquo;e&amp;rdquo; in tomatoe.&lt;/p&gt;
&lt;p&gt;Again, text is indented 4 spaces. (Put a blank line between each
term and its definition to spread things out more.)&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a &amp;ldquo;line block&amp;rdquo; (note how whitespace is honored):&lt;/p&gt;
&lt;p&gt;| Line one
| Line too
| Line tree&lt;/p&gt;
&lt;p&gt;and images can be specified like so:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://via.placeholder.com/350x150&#34; alt=&#34;example image&#34; title=&#34;An exemplary image&#34;&gt;&lt;/p&gt;
&lt;p&gt;Inline math equation: $\omega = d\phi / dt$. Display
math should get its own line like so:&lt;/p&gt;
&lt;p&gt;$$I = \int \rho R^{2} dV$$&lt;/p&gt;
&lt;p&gt;And note that you can backslash-escape any punctuation characters
which you wish to be displayed literally, ex.: `foo`, *bar*, etc.&lt;/p&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;Some footnote text. &lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
</item>
</channel>
</rss>

1
pages/page/1/index.html Normal file
View File

@ -0,0 +1 @@
<!DOCTYPE html><html><head><title>https://state.disroot.org/pages/</title><link rel="canonical" href="https://state.disroot.org/pages/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://state.disroot.org/pages/" /></head></html>

24
sitemap.xml Normal file
View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://state.disroot.org/affected/</loc>
</url>
<url>
<loc>https://state.disroot.org/</loc>
<lastmod>2019-04-08T21:48:39+03:00</lastmod>
</url>
<url>
<loc>https://state.disroot.org/pages/example-page/</loc>
<lastmod>2019-04-08T21:48:39+03:00</lastmod>
</url>
<url>
<loc>https://state.disroot.org/pages/</loc>
<lastmod>2019-04-08T21:48:39+03:00</lastmod>
</url>
</urlset>