From 0c9fbb16e6d3c0eea805958aad4f0b7f35b0e4ce Mon Sep 17 00:00:00 2001 From: Alex Legler Date: Tue, 28 Feb 2012 02:03:25 +0100 Subject: Initial commit --- .gitignore | 2 + Rules | 80 +++++ config.yaml | 79 ++++ content/atom.xml.erb | 7 + content/css/1140.css | 130 +++++++ content/css/ie.css | 43 +++ content/css/screen.css | 142 ++++++++ content/img/feed.png | Bin 0 -> 688 bytes content/img/information.png | Bin 0 -> 621 bytes content/img/maintenance.png | Bin 0 -> 558 bytes content/img/na.png | Bin 0 -> 308 bytes content/img/notice.png | Bin 0 -> 435 bytes content/img/outage.png | Bin 0 -> 748 bytes content/img/site_logo.png | Bin 0 -> 5984 bytes content/img/status_down.png | Bin 0 -> 588 bytes content/img/status_up.png | Bin 0 -> 605 bytes content/img/status_warning.png | Bin 0 -> 585 bytes content/index.haml | 93 +++++ content/js/css3-mediaqueries.js | 779 ++++++++++++++++++++++++++++++++++++++++ content/notices/.gitignore | 1 + example.md | 25 ++ layouts/_post.haml | 21 ++ layouts/default.haml | 38 ++ lib/default.rb | 2 + lib/helpers.rb | 136 +++++++ lib/service-dsl.rb | 73 ++++ lib/services.rb | 93 +++++ 27 files changed, 1744 insertions(+) create mode 100644 .gitignore create mode 100644 Rules create mode 100644 config.yaml create mode 100644 content/atom.xml.erb create mode 100644 content/css/1140.css create mode 100644 content/css/ie.css create mode 100644 content/css/screen.css create mode 100644 content/img/feed.png create mode 100644 content/img/information.png create mode 100644 content/img/maintenance.png create mode 100644 content/img/na.png create mode 100644 content/img/notice.png create mode 100644 content/img/outage.png create mode 100644 content/img/site_logo.png create mode 100644 content/img/status_down.png create mode 100644 content/img/status_up.png create mode 100644 content/img/status_warning.png create mode 100644 content/index.haml create mode 100644 content/js/css3-mediaqueries.js create mode 100644 content/notices/.gitignore create mode 100644 example.md create mode 100644 layouts/_post.haml create mode 100644 layouts/default.haml create mode 100644 lib/default.rb create mode 100644 lib/helpers.rb create mode 100644 lib/service-dsl.rb create mode 100644 lib/services.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c019529 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +tmp +output diff --git a/Rules b/Rules new file mode 100644 index 0000000..59f16a9 --- /dev/null +++ b/Rules @@ -0,0 +1,80 @@ +#!/usr/bin/env ruby + +# A few helpful tips about the Rules file: +# +# * The string given to #compile and #route are matching patterns for +# identifiers--not for paths. Therefore, you can’t match on extension. +# +# * The order of rules is important: for each item, only the first matching +# rule is applied. +# +# * Item identifiers start and end with a slash (e.g. “/about/” for the file +# “content/about.html”). To select all children, grandchildren, … of an +# item, use the pattern “/about/*/”; “/about/*” will also select the parent, +# because “*” matches zero or more characters. + +compile '/css/*/' do + # don’t filter or layout +end + +compile '/js/*/' do + # don’t filter or layout +end + +compile '/atom' do + filter :erb +end + +compile '*' do + ext = item[:extension].nil? ? nil : item[:extension].split('.').last + + if item.binary? + # don’t filter binary items + elsif ext == 'md' || ext == 'markdown' + filter :erb + filter :rdiscount + + if item[:kind] == 'article' + layout '_post' + snapshot :single_post + end + + layout 'default' + elsif ext == 'haml' + filter :haml + layout 'default' + else + filter :erb + layout 'default' + end +end + +route '/css/*/' do + item.identifier.chop + '.css' +end + +route '/js/*/' do + item.identifier.chop + '.js' +end + +route '/atom' do + item.identifier.chop + '.xml' +end + +route '/notices/*' do + item.identifier.chop + '.html' +end + +route '*' do + if item.binary? + # Write item with identifier /foo/ to /foo.ext + item.identifier.chop + '.' + item[:extension] + else + # Write item with identifier /foo/ to /foo/index.html + item.identifier + 'index.html' + end +end + +layout '*', :haml + +# vim: et sw=2 ts=2: diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..18d2280 --- /dev/null +++ b/config.yaml @@ -0,0 +1,79 @@ +base_url: http://infra-status.gentoo.org + +# A list of file extensions that nanoc will consider to be textual rather than +# binary. If an item with an extension not in this list is found, the file +# will be considered as binary. +text_extensions: [ 'css', 'erb', 'haml', 'htm', 'html', 'js', 'less', 'markdown', 'md', 'php', 'rb', 'sass', 'scss', 'txt', 'xhtml', 'xml', 'coffee' ] + +# The path to the directory where all generated files will be written to. This +# can be an absolute path starting with a slash, but it can also be path +# relative to the site directory. +output_dir: output + +# A list of index filenames, i.e. names of files that will be served by a web +# server when a directory is requested. Usually, index files are named +# “index.html”, but depending on the web server, this may be something else, +# such as “default.htm”. This list is used by nanoc to generate pretty URLs. +index_filenames: [ 'index.html' ] + +# Whether or not to generate a diff of the compiled content when compiling a +# site. The diff will contain the differences between the compiled content +# before and after the last site compilation. +enable_output_diff: false + +prune: + # Whether to automatically remove files not managed by nanoc from the output + # directory. For safety reasons, this is turned off by default. + auto_prune: false + + # Which files and directories you want to exclude from pruning. If you version + # your output directory, you should probably exclude VCS directories such as + # .git, .svn etc. + exclude: [ '.git', '.hg', '.svn', 'CVS' ] + +# The data sources where nanoc loads its data from. This is an array of +# hashes; each array element represents a single data source. By default, +# there is only a single data source that reads data from the “content/” and +# “layout/” directories in the site directory. +data_sources: + - + # The type is the identifier of the data source. By default, this will be + # `filesystem_unified`. + type: filesystem_unified + + # The path where items should be mounted (comparable to mount points in + # Unix-like systems). This is “/” by default, meaning that items will have + # “/” prefixed to their identifiers. If the items root were “/en/” + # instead, an item at content/about.html would have an identifier of + # “/en/about/” instead of just “/about/”. + items_root: / + + # The path where layouts should be mounted. The layouts root behaves the + # same as the items root, but applies to layouts rather than items. + layouts_root: / + + # Whether to allow periods in identifiers. When turned off, everything + # past the first period is considered to be the extension, and when + # turned on, only the characters past the last period are considered to + # be the extension. For example, a file named “content/about.html.erb” + # will have the identifier “/about/” when turned off, but when turned on + # it will become “/about.html/” instead. + allow_periods_in_identifiers: false + +# Configuration for the “watch” command, which watches a site for changes and +# recompiles if necessary. +watcher: + # A list of directories to watch for changes. When editing this, make sure + # that the “output/” and “tmp/” directories are _not_ included in this list, + # because recompiling the site will cause these directories to change, which + # will cause the site to be recompiled, which will cause these directories + # to change, which will cause the site to be recompiled again, and so on. + dirs_to_watch: [ 'content', 'layouts', 'lib' ] + + # A list of single files to watch for changes. As mentioned above, don’t put + # any files from the “output/” or “tmp/” directories in here. + files_to_watch: [ 'config.yaml', 'Rules' ] + + # When to send notifications (using Growl or notify-send). + notify_on_compilation_success: true + notify_on_compilation_failure: true diff --git a/content/atom.xml.erb b/content/atom.xml.erb new file mode 100644 index 0000000..6439efb --- /dev/null +++ b/content/atom.xml.erb @@ -0,0 +1,7 @@ +--- +title: Gentoo Linux Infrastructure Status +author_name: Gentoo Infrastructure Team +author_uri: http://infra-status.gentoo.org/ +is_hidden: true +--- +<%= atom_feed(:content_proc => feed_proc, :articles => feed_articles) %> diff --git a/content/css/1140.css b/content/css/1140.css new file mode 100644 index 0000000..b8d6fa2 --- /dev/null +++ b/content/css/1140.css @@ -0,0 +1,130 @@ +/* CSS Resets */ + +html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,address,cite,code,del,dfn,em,img,ins,q,small,strong,sub,sup,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{border:0;margin:0;padding:0}article,aside,figure,figure img,figcaption,hgroup,footer,header,nav,section,video,object{display:block}a img{border:0}figure{position:relative}figure img{width:100%} + + +/* ==================================================================================================================== */ +/* ! The 1140px Grid V2 by Andy Taylor \ http://cssgrid.net \ http://www.twitter.com/andytlr \ http://www.andytlr.com */ +/* ==================================================================================================================== */ + +.container { +padding-left: 20px; +padding-right: 20px; +} + +.row { +width: 100%; +max-width: 1140px; +min-width: 755px; +margin: 0 auto; +overflow: hidden; +} + +.onecol, .twocol, .threecol, .fourcol, .fivecol, .sixcol, .sevencol, .eightcol, .ninecol, .tencol, .elevencol { +margin-right: 3.8%; +float: left; +min-height: 1px; +} + +.row .onecol { +width: 4.85%; +} + +.row .twocol { +width: 13.45%; +} + +.row .threecol { +width: 22.05%; +} + +.row .fourcol { +width: 30.75%; +} + +.row .fivecol { +width: 39.45%; +} + +.row .sixcol { +width: 48%; +} + +.row .sevencol { +width: 56.75%; +} + +.row .eightcol { +width: 65.4%; +} + +.row .ninecol { +width: 74.05%; +} + +.row .tencol { +width: 82.7%; +} + +.row .elevencol { +width: 91.35%; +} + +.row .twelvecol { +width: 100%; +float: left; +} + +.last { +margin-right: 0px; +} + +img, object, embed { +max-width: 100%; +} + +img { + height: auto; +} + + +/* Smaller screens */ + +@media only screen and (max-width: 1023px) { + + body { + font-size: 0.8em; + line-height: 1.5em; + } + + } + + +/* Mobile */ + +@media handheld, only screen and (max-width: 767px) { + + body { + font-size: 16px; + -webkit-text-size-adjust: none; + } + + .row, body, .container { + width: 100%; + min-width: 0; + margin-left: 0px; + margin-right: 0px; + padding-left: 0px; + padding-right: 0px; + } + + .row .onecol, .row .twocol, .row .threecol, .row .fourcol, .row .fivecol, .row .sixcol, .row .sevencol, .row .eightcol, .row .ninecol, .row .tencol, .row .elevencol, .row .twelvecol { + width: auto; + float: none; + margin-left: 0px; + margin-right: 0px; + padding-left: 20px; + padding-right: 20px; + } + +} \ No newline at end of file diff --git a/content/css/ie.css b/content/css/ie.css new file mode 100644 index 0000000..530c113 --- /dev/null +++ b/content/css/ie.css @@ -0,0 +1,43 @@ +.onecol { +width: 4.7%; +} + +.twocol { +width: 13.2%; +} + +.threecol { +width: 22.05%; +} + +.fourcol { +width: 30.6%; +} + +.fivecol { +width: 39%; +} + +.sixcol { +width: 48%; +} + +.sevencol { +width: 56.75%; +} + +.eightcol { +width: 61.6%; +} + +.ninecol { +width: 74.05%; +} + +.tencol { +width: 82%; +} + +.elevencol { +width: 91.35%; +} \ No newline at end of file diff --git a/content/css/screen.css b/content/css/screen.css new file mode 100644 index 0000000..c3970c9 --- /dev/null +++ b/content/css/screen.css @@ -0,0 +1,142 @@ +/* ============================== */ +/* ! Layout for desktop version */ +/* ============================== */ + +body { + font-family: 'Open Sans', sans-serif; + padding-bottom: 3em; +} + +a:link, a:visited { + color: #54487A; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +.right { + float: right; +} + +.header { + background-color: #E8E8E8; + border-top: 2px solid #54487A; + border-bottom: 1px solid #dcdcdc; +} + +.header .row { + padding-top: .25em; + padding-bottom: .25em; +} + +h1 { + font-size: 1.5em; +} + +h2 { + font-size: 1.25em; +} + +h3 { + font-size: 1.1em; + font-weight: 600; +} + +.site-title { + background-color: #f5f5f5; + border-bottom: 1px solid #e8e8e8; + margin-bottom: 1em; +} + +.site-title .row { + padding-top: .25em; + padding-bottom: .25em; +} + +table.statustable { + width: 100%; + border-spacing: 0 2px; +} + +table.statustable td { + padding-bottom: 1px; + border-bottom: 1px solid #e8e8e8; +} + +table.statustable tr.last td { + border: none !important; +} + +table.statustable td.status { + text-align: right; +} + +table.statustable tr.down { + color: #a40000; +} + +table.statustable tr.warning { + color: #ac4a00; +} + +.grey { + background-color: #F5F5F5; +} + +.bottomline { + border-bottom: 1px solid #e8e8e8; + padding-bottom: 1em; + margin-bottom: 1em; +} + +p { + margin-top: .5em; + margin-bottom: .5em; +} + +.post { + margin-top: .5em; + margin-bottom: .5em; + border-top: 1px solid #dcdcdc; +} + +table.dates { + margin-left: 1em; + font-style: italic; +} + +td { + padding-left: 0.25em; + padding-right: 0.25em; +} + +#footer { + border-top: 1px solid #dcdcdc; + position: fixed; + width: 100%; + bottom: 0; + background-color: #E8E8E8; + padding-left: 0; + padding-right: 0; + padding-top: .5em; + padding-bottom: .5em; + font-size: .75em; +} + +/* ============================= */ +/* ! Layout for mobile version */ +/* ============================= */ + +@media handheld, only screen and (max-width: 767px) { + + body { + padding-bottom: 0; + } + + #footer { + position: relative !important; + } + +} diff --git a/content/img/feed.png b/content/img/feed.png new file mode 100644 index 0000000..cdf4e8f Binary files /dev/null and b/content/img/feed.png differ diff --git a/content/img/information.png b/content/img/information.png new file mode 100644 index 0000000..4ecaf37 Binary files /dev/null and b/content/img/information.png differ diff --git a/content/img/maintenance.png b/content/img/maintenance.png new file mode 100644 index 0000000..8347aa8 Binary files /dev/null and b/content/img/maintenance.png differ diff --git a/content/img/na.png b/content/img/na.png new file mode 100644 index 0000000..93807bc Binary files /dev/null and b/content/img/na.png differ diff --git a/content/img/notice.png b/content/img/notice.png new file mode 100644 index 0000000..adaf4f0 Binary files /dev/null and b/content/img/notice.png differ diff --git a/content/img/outage.png b/content/img/outage.png new file mode 100644 index 0000000..413291d Binary files /dev/null and b/content/img/outage.png differ diff --git a/content/img/site_logo.png b/content/img/site_logo.png new file mode 100644 index 0000000..8ff911e Binary files /dev/null and b/content/img/site_logo.png differ diff --git a/content/img/status_down.png b/content/img/status_down.png new file mode 100644 index 0000000..933272b Binary files /dev/null and b/content/img/status_down.png differ diff --git a/content/img/status_up.png b/content/img/status_up.png new file mode 100644 index 0000000..3b0e3fc Binary files /dev/null and b/content/img/status_up.png differ diff --git a/content/img/status_warning.png b/content/img/status_warning.png new file mode 100644 index 0000000..e792fb0 Binary files /dev/null and b/content/img/status_warning.png differ diff --git a/content/index.haml b/content/index.haml new file mode 100644 index 0000000..129f3e4 --- /dev/null +++ b/content/index.haml @@ -0,0 +1,93 @@ +--- +title: Index +--- +.container.bottomline + .row + .twelvecol.last + %h2 Service Availability Overview + %p + This data is aggregated from our automated service monitoring system as well as the outage and maintenance notices posted below. + .row + .fourcol + %h3 Community Services + %table.statustable + %tr.up + %td gentoo.org Website + %td.status + = service_icons 'www' + %tr + %td Forums + %td.status + = service_icons 'forums' + %tr + %td Wiki + %td.status + = service_icons 'wiki' + %tr + %td Planet Gentoo + %td.status + = service_icons 'planet' + %tr + %td Packages Database + %td.status + = service_icons 'pgo' + %tr + %td Mailing Lists + %td.status + = service_icons 'lists' + %tr.last + %td Mailing List Archives + %td.status + = service_icons 'archives' + .fourcol + %h3 Development Services + %table.statustable + %tr + %td cvs.gentoo.org + %td.status + = service_icons 'cvs' + %tr + %td Bugzilla + %td.status + = service_icons 'bugzilla' + %tr + %td Devmanual + %td.status + = service_icons 'devmanual' + %tr + %td Overlays + %td.status + = service_icons 'overlays' + %tr + %td tinderbox.dev.gentoo.org + %td.status + = service_icons 'tinderbox' + %tr.last + %td sources.gentoo.org + %td.status + = service_icons 'sources' + .fourcol.last + %h3 Developer Resources + %table.statustable + %tr + %td dev.gentoo.org shell access + %td.status + = service_icons 'dgo_ssh' + %tr + %td dev.gentoo.org web hosting + %td.status + = service_icons 'dgo_http' + %tr + %td In-/Outbound Email (SMTP) + %td.status + = service_icons 'dgo_smtp' + %tr.last + %td Mailbox access (POP/IMAP) + %td.status + = service_icons 'dgo_mbox' + +.container + .row + .twelvecol.last + %h2 Maintenance and Outage Notices + = notices diff --git a/content/js/css3-mediaqueries.js b/content/js/css3-mediaqueries.js new file mode 100644 index 0000000..1ea806d --- /dev/null +++ b/content/js/css3-mediaqueries.js @@ -0,0 +1,779 @@ +if(typeof Object.create!=="function"){ +Object.create=function(o){ +function F(){ +}; +F.prototype=o; +return new F(); +}; +} +var ua={toString:function(){ +return navigator.userAgent; +},test:function(s){ +return this.toString().toLowerCase().indexOf(s.toLowerCase())>-1; +}}; +ua.version=(ua.toString().toLowerCase().match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1]; +ua.webkit=ua.test("webkit"); +ua.gecko=ua.test("gecko")&&!ua.webkit; +ua.opera=ua.test("opera"); +ua.ie=ua.test("msie")&&!ua.opera; +ua.ie6=ua.ie&&document.compatMode&&typeof document.documentElement.style.maxHeight==="undefined"; +ua.ie7=ua.ie&&document.documentElement&&typeof document.documentElement.style.maxHeight!=="undefined"&&typeof XDomainRequest==="undefined"; +ua.ie8=ua.ie&&typeof XDomainRequest!=="undefined"; +var domReady=function(){ +var _1=[]; +var _2=function(){ +if(!arguments.callee.done){ +arguments.callee.done=true; +for(var i=0;i<_1.length;i++){ +_1[i](); +} +} +}; +if(document.addEventListener){ +document.addEventListener("DOMContentLoaded",_2,false); +} +if(ua.ie){ +(function(){ +try{ +document.documentElement.doScroll("left"); +} +catch(e){ +setTimeout(arguments.callee,50); +return; +} +_2(); +})(); +document.onreadystatechange=function(){ +if(document.readyState==="complete"){ +document.onreadystatechange=null; +_2(); +} +}; +} +if(ua.webkit&&document.readyState){ +(function(){ +if(document.readyState!=="loading"){ +_2(); +}else{ +setTimeout(arguments.callee,10); +} +})(); +} +window.onload=_2; +return function(fn){ +if(typeof fn==="function"){ +_1[_1.length]=fn; +} +return fn; +}; +}(); +var cssHelper=function(){ +var _3={BLOCKS:/[^\s{][^{]*\{(?:[^{}]*\{[^{}]*\}[^{}]*|[^{}]*)*\}/g,BLOCKS_INSIDE:/[^\s{][^{]*\{[^{}]*\}/g,DECLARATIONS:/[a-zA-Z\-]+[^;]*:[^;]+;/g,RELATIVE_URLS:/url\(['"]?([^\/\)'"][^:\)'"]+)['"]?\)/g,REDUNDANT_COMPONENTS:/(?:\/\*([^*\\\\]|\*(?!\/))+\*\/|@import[^;]+;)/g,REDUNDANT_WHITESPACE:/\s*(,|:|;|\{|\})\s*/g,MORE_WHITESPACE:/\s{2,}/g,FINAL_SEMICOLONS:/;\}/g,NOT_WHITESPACE:/\S+/g}; +var _4,_5=false; +var _6=[]; +var _7=function(fn){ +if(typeof fn==="function"){ +_6[_6.length]=fn; +} +}; +var _8=function(){ +for(var i=0;i<_6.length;i++){ +_6[i](_4); +} +}; +var _9={}; +var _a=function(n,v){ +if(_9[n]){ +var _b=_9[n].listeners; +if(_b){ +for(var i=0;i<_b.length;i++){ +_b[i](v); +} +} +} +}; +var _c=function(_d,_e,_f){ +if(ua.ie&&!window.XMLHttpRequest){ +window.XMLHttpRequest=function(){ +return new ActiveXObject("Microsoft.XMLHTTP"); +}; +} +if(!XMLHttpRequest){ +return ""; +} +var r=new XMLHttpRequest(); +try{ +r.open("get",_d,true); +r.setRequestHeader("X_REQUESTED_WITH","XMLHttpRequest"); +} +catch(e){ +_f(); +return; +} +var _10=false; +setTimeout(function(){ +_10=true; +},5000); +document.documentElement.style.cursor="progress"; +r.onreadystatechange=function(){ +if(r.readyState===4&&!_10){ +if(!r.status&&location.protocol==="file:"||(r.status>=200&&r.status<300)||r.status===304||navigator.userAgent.indexOf("Safari")>-1&&typeof r.status==="undefined"){ +_e(r.responseText); +}else{ +_f(); +} +document.documentElement.style.cursor=""; +r=null; +} +}; +r.send(""); +}; +var _11=function(_12){ +_12=_12.replace(_3.REDUNDANT_COMPONENTS,""); +_12=_12.replace(_3.REDUNDANT_WHITESPACE,"$1"); +_12=_12.replace(_3.MORE_WHITESPACE," "); +_12=_12.replace(_3.FINAL_SEMICOLONS,"}"); +return _12; +}; +var _13={mediaQueryList:function(s){ +var o={}; +var idx=s.indexOf("{"); +var lt=s.substring(0,idx); +s=s.substring(idx+1,s.length-1); +var mqs=[],rs=[]; +var qts=lt.toLowerCase().substring(7).split(","); +for(var i=0;i-1&&_23.href&&_23.href.length!==0&&!_23.disabled){ +_1f[_1f.length]=_23; +} +} +if(_1f.length>0){ +var c=0; +var _24=function(){ +c++; +if(c===_1f.length){ +_20(); +} +}; +var _25=function(_26){ +var _27=_26.href; +_c(_27,function(_28){ +_28=_11(_28).replace(_3.RELATIVE_URLS,"url("+_27.substring(0,_27.lastIndexOf("/"))+"/$1)"); +_26.cssHelperText=_28; +_24(); +},_24); +}; +for(i=0;i<_1f.length;i++){ +_25(_1f[i]); +} +}else{ +_20(); +} +}; +var _29={mediaQueryLists:"array",rules:"array",selectors:"object",declarations:"array",properties:"object"}; +var _2a={mediaQueryLists:null,rules:null,selectors:null,declarations:null,properties:null}; +var _2b=function(_2c,v){ +if(_2a[_2c]!==null){ +if(_29[_2c]==="array"){ +return (_2a[_2c]=_2a[_2c].concat(v)); +}else{ +var c=_2a[_2c]; +for(var n in v){ +if(v.hasOwnProperty(n)){ +if(!c[n]){ +c[n]=v[n]; +}else{ +c[n]=c[n].concat(v[n]); +} +} +} +return c; +} +} +}; +var _2d=function(_2e){ +_2a[_2e]=(_29[_2e]==="array")?[]:{}; +for(var i=0;i<_4.length;i++){ +_2b(_2e,_4[i].cssHelperParsed[_2e]); +} +return _2a[_2e]; +}; +domReady(function(){ +var els=document.body.getElementsByTagName("*"); +for(var i=0;i=_44)||(max&&_46<_44)||(!min&&!max&&_46===_44)); +}else{ +return false; +} +}else{ +return _46>0; +} +}else{ +if("device-height"===_41.substring(l-13,l)){ +_47=screen.height; +if(_42!==null){ +if(_43==="length"){ +return ((min&&_47>=_44)||(max&&_47<_44)||(!min&&!max&&_47===_44)); +}else{ +return false; +} +}else{ +return _47>0; +} +}else{ +if("width"===_41.substring(l-5,l)){ +_46=document.documentElement.clientWidth||document.body.clientWidth; +if(_42!==null){ +if(_43==="length"){ +return ((min&&_46>=_44)||(max&&_46<_44)||(!min&&!max&&_46===_44)); +}else{ +return false; +} +}else{ +return _46>0; +} +}else{ +if("height"===_41.substring(l-6,l)){ +_47=document.documentElement.clientHeight||document.body.clientHeight; +if(_42!==null){ +if(_43==="length"){ +return ((min&&_47>=_44)||(max&&_47<_44)||(!min&&!max&&_47===_44)); +}else{ +return false; +} +}else{ +return _47>0; +} +}else{ +if("device-aspect-ratio"===_41.substring(l-19,l)){ +return _43==="aspect-ratio"&&screen.width*_44[1]===screen.height*_44[0]; +}else{ +if("color-index"===_41.substring(l-11,l)){ +var _48=Math.pow(2,screen.colorDepth); +if(_42!==null){ +if(_43==="absolute"){ +return ((min&&_48>=_44)||(max&&_48<_44)||(!min&&!max&&_48===_44)); +}else{ +return false; +} +}else{ +return _48>0; +} +}else{ +if("color"===_41.substring(l-5,l)){ +var _49=screen.colorDepth; +if(_42!==null){ +if(_43==="absolute"){ +return ((min&&_49>=_44)||(max&&_49<_44)||(!min&&!max&&_49===_44)); +}else{ +return false; +} +}else{ +return _49>0; +} +}else{ +if("resolution"===_41.substring(l-10,l)){ +var res; +if(_45==="dpcm"){ +res=_3d("1cm"); +}else{ +res=_3d("1in"); +} +if(_42!==null){ +if(_43==="resolution"){ +return ((min&&res>=_44)||(max&&res<_44)||(!min&&!max&&res===_44)); +}else{ +return false; +} +}else{ +return res>0; +} +}else{ +return false; +} +} +} +} +} +} +} +} +}; +var _4a=function(mq){ +var _4b=mq.getValid(); +var _4c=mq.getExpressions(); +var l=_4c.length; +if(l>0){ +for(var i=0;i0){ +s[c++]=","; +} +s[c++]=n; +} +} +if(s.length>0){ +_39[_39.length]=cssHelper.addStyle("@media "+s.join("")+"{"+mql.getCssText()+"}",false); +} +}; +var _4e=function(_4f){ +for(var i=0;i<_4f.length;i++){ +_4d(_4f[i]); +} +if(ua.ie){ +document.documentElement.style.display="block"; +setTimeout(function(){ +document.documentElement.style.display=""; +},0); +setTimeout(function(){ +cssHelper.broadcast("cssMediaQueriesTested"); +},100); +}else{ +cssHelper.broadcast("cssMediaQueriesTested"); +} +}; +var _50=function(){ +for(var i=0;i<_39.length;i++){ +cssHelper.removeStyle(_39[i]); +} +_39=[]; +cssHelper.mediaQueryLists(_4e); +}; +var _51=0; +var _52=function(){ +var _53=cssHelper.getViewportWidth(); +var _54=cssHelper.getViewportHeight(); +if(ua.ie){ +var el=document.createElement("div"); +el.style.position="absolute"; +el.style.top="-9999em"; +el.style.overflow="scroll"; +document.body.appendChild(el); +_51=el.offsetWidth-el.clientWidth; +document.body.removeChild(el); +} +var _55; +var _56=function(){ +var vpw=cssHelper.getViewportWidth(); +var vph=cssHelper.getViewportHeight(); +if(Math.abs(vpw-_53)>_51||Math.abs(vph-_54)>_51){ +_53=vpw; +_54=vph; +clearTimeout(_55); +_55=setTimeout(function(){ +if(!_3a()){ +_50(); +}else{ +cssHelper.broadcast("cssMediaQueriesTested"); +} +},500); +} +}; +window.onresize=function(){ +var x=window.onresize||function(){ +}; +return function(){ +x(); +_56(); +}; +}(); +}; +var _57=document.documentElement; +_57.style.marginLeft="-32767px"; +setTimeout(function(){ +_57.style.marginTop=""; +},20000); +return function(){ +if(!_3a()){ +cssHelper.addListener("newStyleParsed",function(el){ +_4e(el.cssHelperParsed.mediaQueryLists); +}); +cssHelper.addListener("cssMediaQueriesTested",function(){ +if(ua.ie){ +_57.style.width="1px"; +} +setTimeout(function(){ +_57.style.width=""; +_57.style.marginLeft=""; +},0); +cssHelper.removeListener("cssMediaQueriesTested",arguments.callee); +}); +_3c(); +_50(); +}else{ +_57.style.marginLeft=""; +} +_52(); +}; +}()); +try{ +document.execCommand("BackgroundImageCache",false,true); +} +catch(e){ +} + diff --git a/content/notices/.gitignore b/content/notices/.gitignore new file mode 100644 index 0000000..dd44972 --- /dev/null +++ b/content/notices/.gitignore @@ -0,0 +1 @@ +*.md diff --git a/example.md b/example.md new file mode 100644 index 0000000..64da7c9 --- /dev/null +++ b/example.md @@ -0,0 +1,25 @@ +--- +title: Example Notice +active: true +type: maintenance +created_at: 2012-02-20 10:00 +eta: 2012-02-22 10:00 +expire: 2012-03-20 10:00 +kind: article +affects: [overlays, forums, bugzilla] +force_state: maintenance +--- + +Here you can add text in the markdown format. + +Parameters above: +title: self-explanatory +active: set this to false to completely hide the notice +type: (maintenance|information|outage) sets the icon +created_at: self-explanatory +eta: estimated time the service is restored (optional) +expire: when to hide the notice. defaults to one week (optional) +kind: set to 'article' (mandatory!) +affects: array of services this notice affects (TODO list, optional) +force_state: (maintenance|up|down) force the state of all services this notice applies to to this state (optional) + diff --git a/layouts/_post.haml b/layouts/_post.haml new file mode 100644 index 0000000..16c7ff3 --- /dev/null +++ b/layouts/_post.haml @@ -0,0 +1,21 @@ +.row.post + %h3 + =item_icon(item[:type]) + =item[:title] + .grey + %table.dates + %tr + %td Posted at + %td=item[:created_at] + - if item.attributes.has_key? :eta + %tr + %td Estimated time of recovery + %td=item[:eta] + - if is_expired? item + %tr{ :colspan => '2'} + %td + %img{ :src => base_url + 'img/information.png', :alt => 'information'} + This notice is + %strong expired. + The service has been restored. + ~ yield diff --git a/layouts/default.haml b/layouts/default.haml new file mode 100644 index 0000000..e5f5938 --- /dev/null +++ b/layouts/default.haml @@ -0,0 +1,38 @@ +!!! 5 +%html + %head + %title Gentoo Linux Infrastructure status + %meta{ :charset => 'utf-8' } + %meta{ :name => 'viewport', :content => 'width=device-width, initial-scale=1.0' } + /[if lte IE 9] + %link{ :rel => 'stylesheet', :href => '/css/ie.css', :type => 'text/css', :media => 'screen' } + %link{ :rel => 'stylesheet', :href => '/css/1140.css', :type => 'text/css', :media => 'screen' } + %link{ :rel => 'stylesheet', :href => '/css/screen.css', :type => 'text/css', :media => 'screen' } + %link{ :rel => 'stylesheet', :href => 'http://fonts.googleapis.com/css?family=Open+Sans:400,400italic,700,700italic,600', :type => 'text/css' } + %link{ :rel => 'alternate', :href => '/atom.xml', :type => 'application/atom+xml', :title => 'Atom Feed' } + %script{ :src => '/js/css3-mediaqueries.js', :type => 'text/javascript'} + %body + .container.header + .row + .twelvecol.last + %img{ :src => '/img/site_logo.png', :alt => 'Gentoo Linux Infrastructure status' } + .container.site-title + .row + .twelvecol.last + %span.right + %a{ :href => '/atom.xml', :title => 'Subscribe to the Atom feed' } + %img{ :src => '/img/feed.png', :alt => 'Atom feed' } + %h1 Gentoo Linux Infrastructure Status + + = yield + .container#footer + .row + .sixcol + Copyright © Gentoo Foundation, Inc. · Contents licensed under the CC-BY-SA 3.0 license + .sixcol.last + This site is powered by: + %a{ :href => 'http://nanoc.stoneship.org/'} nanoc + · + %a{ :href => 'http://p.yusukekamiyamane.com/'} the Fugue iconset + · + %a{ :href => 'http://cssgrid.net/' } the 1140 grid diff --git a/lib/default.rb b/lib/default.rb new file mode 100644 index 0000000..a4df0cc --- /dev/null +++ b/lib/default.rb @@ -0,0 +1,2 @@ +# All files in the 'lib' directory will be loaded +# before nanoc starts compiling. diff --git a/lib/helpers.rb b/lib/helpers.rb new file mode 100644 index 0000000..a66457f --- /dev/null +++ b/lib/helpers.rb @@ -0,0 +1,136 @@ +include Nanoc::Helpers::Blogging +include Nanoc::Helpers::Rendering +require 'date' + +# Defining state constants +module State + UP=1 + DOWN=2 + WARNING=3 +end + +def service_icons(service) + content = "" + + if service_has_notices?(service) + content << notice_icon + " " + end + + unless (forced_state = get_forced_state(service)) == nil + content << status_icon(forced_state) + return content + end + + case ServiceRegistry.instance.services[service] + when State::UP + content << status_icon('up') + when State::WARNING + content << status_icon('warning') + when State::DOWN + content << status_icon('down') + else + content << status_icon('na') + end + + content +end + +def status_icon(status) + case status.to_s + when 'up' + return 'The service is up and running.' + when 'down' + return 'The service is down.' + when 'warning' + return 'There are issues with the service.' + when 'maintenance' + return 'The service is undergoing scheduled maintenance.' + else + return 'No data available.' + end +end + +def notice_icon + return 'There are notices regarding this service posted below.' +end + +def item_icon(type) + case type.to_s + when 'maintenance' + return 'Scheduled maintenance' + when 'outage' + return 'Unplanned outage' + when 'information' + return 'General information' + end +end + +# Compiles all active notices into one piece of HTML +def notices + content="" + + sorted_articles.each do |notice| + next if is_expired? notice + + content += notice.compiled_content(:snapshot => :single_post) + end + + content +end + +# Are there any notices for the service? +def service_has_notices?(service) + articles.each do |notice| + next if is_expired? notice + + if notice.attributes.has_key? :affects and notice[:affects].include? service + return true + end + end + + false +end + +def get_forced_state(service) + return nil unless service_has_notices?(service) + + sorted_articles.each do |notice| + next if is_expired? notice + + if notice.attributes.has_key? :affects and notice[:affects].include? service + return notice[:force_state] if notice.attributes.has_key? :force_state + end + end +end + +# Filters expired items and items w/o expiration date that are older than a week. +def is_expired?(notice) + if notice.attributes.has_key? :active + return true if notice[:active] != true + end + + if notice.attributes.has_key? :expire + expire_date = DateTime.parse(notice[:expire]) + + DateTime.now > expire_date + else + creation_date = DateTime.parse(notice[:created_at]) + date_diff = DateTime.now - creation_date + + date_diff.to_i > 7 + end +end + +def feed_proc + lambda do |notice| + notice.compiled_content(:snapshot => :single_post) + end +end + +def feed_articles + articles.select {|n| not is_expired? n} +end + +def base_url + @site.config[:base_url] + '/' +end diff --git a/lib/service-dsl.rb b/lib/service-dsl.rb new file mode 100644 index 0000000..42f94d4 --- /dev/null +++ b/lib/service-dsl.rb @@ -0,0 +1,73 @@ +require 'singleton' +require 'json' + +module HelperMethods + # Checks if all hosts are up + def all_hosts_up?(hosts) + hosts.each do |host| + return false unless status_data['hosts'][host]['current_state'] == 0 + end + + true + end + + def host_up?(host) + status_data['hosts'][host]['current_state'] == 0 + end + + def host_flapping?(host) + status_data['hosts'][host]['is_flapping'] != 0 + end + + # Checks if the service is up + def service_up?(host, service) + status_data['services'][host][service]['current_state'] == 0 + end + + def service_flapping?(host, service) + status_data['services'][host][service]['is_flapping'] != 0 + end + + def default(host, service = nil) + if service == nil + if host_flapping? host + State::WARNING + elsif host_up? host + State::UP + else + State::DOWN + end + else + if service_flapping? host, service + State::WARNING + elsif service_up? host, service + State::UP + else + State::DOWN + end + end + end +end + +class ServiceRegistry + StatusSource = "/tmp/status.json" + + include Singleton + include HelperMethods + attr_reader :services, :status_data + + + def initialize + @services = {} + + @status_data = JSON.parse(File.read(StatusSource)) + end + + def service(name, &block) + @services[name] = block.call + end +end + +def Services(&block) + ServiceRegistry.instance.instance_eval(&block) +end diff --git a/lib/services.rb b/lib/services.rb new file mode 100644 index 0000000..35b1127 --- /dev/null +++ b/lib/services.rb @@ -0,0 +1,93 @@ +# Accessing JSON data works via status_data +# Return State::UP, State::Down, or State::Warning +# Nagios states: 0 (ok), 1 (warning), 2 (critical), 3 (unknown), 4 (dependent) + +Services do + service 'www' do + if service_flapping? 'ani', 'http_www' and service_flapping? 'auklet', 'http_www' and service_flapping? 'loon', 'http_www' + State::WARNING + elsif service_up? 'ani', 'http_www' or service_up? 'auklet', 'http_www' or service_up? 'loon', 'http_www' + State::UP + else + State::DOWN + end + end + + service 'forums' do + if service_flapping? 'godwit', 'http_forums' or service_flapping? 'gannet', 'http_forums' + State::WARNING + elsif service_up? 'godwit', 'http_forums' or service_up? 'gannet', 'http_forums' + State::UP + else + State::DOWN + end + end + + service 'wiki' do + default 'bittern', 'http_wiki' + end + + service 'planet' do + default 'barbet', 'http_planet' + end + + service 'pgo' do + default 'barbet', 'http_packages' + end + + service 'lists' do + default 'pigeon' + end + + service 'archives' do + default 'finch' + end + + service 'cvs' do + default 'flycatcher', 'ssh_cvs' + end + + service 'devmanual' do + default 'barbet', 'http_devmanual' + end + + service 'overlays' do + default 'hornbill', 'http_overlays' + end + + service 'tinderbox' do + default 'tinderbox.dev' + end + + service 'sources' do + default 'motmot', 'http_sources' + end + + service 'bugzilla' do + if service_flapping? 'yellowbishop', 'http_bugs' or service_flapping? 'yellowleg', 'http_bugs' + State::WARNING + elsif service_up? 'yellowbishop', 'http_bugs' and service_up? 'yellowleg', 'http_bugs' + State::UP + elsif service_up? 'yellowbishop', 'http_bugs' or service_up? 'yellowleg', 'http_bugs' + State::WARNING + else + State::DOWN + end + end + + service 'dgo_ssh' do + default 'woodpecker', 'ssh_dgo' + end + + service 'dgo_http' do + nil + end + + service 'dgo_smtp' do + nil + end + + service 'dgo_mbox' do + nil + end +end -- cgit v1.2.3-65-gdbad From cb3c0bb7ffaeeecf3a6afac0aeeeb32bbaf3d039 Mon Sep 17 00:00:00 2001 From: Alex Legler Date: Tue, 28 Feb 2012 13:19:19 +0100 Subject: Move config.yaml to config.yaml.dist --- config.yaml | 79 -------------------------------------------------------- config.yaml.dist | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 79 deletions(-) delete mode 100644 config.yaml create mode 100644 config.yaml.dist diff --git a/config.yaml b/config.yaml deleted file mode 100644 index 18d2280..0000000 --- a/config.yaml +++ /dev/null @@ -1,79 +0,0 @@ -base_url: http://infra-status.gentoo.org - -# A list of file extensions that nanoc will consider to be textual rather than -# binary. If an item with an extension not in this list is found, the file -# will be considered as binary. -text_extensions: [ 'css', 'erb', 'haml', 'htm', 'html', 'js', 'less', 'markdown', 'md', 'php', 'rb', 'sass', 'scss', 'txt', 'xhtml', 'xml', 'coffee' ] - -# The path to the directory where all generated files will be written to. This -# can be an absolute path starting with a slash, but it can also be path -# relative to the site directory. -output_dir: output - -# A list of index filenames, i.e. names of files that will be served by a web -# server when a directory is requested. Usually, index files are named -# “index.html”, but depending on the web server, this may be something else, -# such as “default.htm”. This list is used by nanoc to generate pretty URLs. -index_filenames: [ 'index.html' ] - -# Whether or not to generate a diff of the compiled content when compiling a -# site. The diff will contain the differences between the compiled content -# before and after the last site compilation. -enable_output_diff: false - -prune: - # Whether to automatically remove files not managed by nanoc from the output - # directory. For safety reasons, this is turned off by default. - auto_prune: false - - # Which files and directories you want to exclude from pruning. If you version - # your output directory, you should probably exclude VCS directories such as - # .git, .svn etc. - exclude: [ '.git', '.hg', '.svn', 'CVS' ] - -# The data sources where nanoc loads its data from. This is an array of -# hashes; each array element represents a single data source. By default, -# there is only a single data source that reads data from the “content/” and -# “layout/” directories in the site directory. -data_sources: - - - # The type is the identifier of the data source. By default, this will be - # `filesystem_unified`. - type: filesystem_unified - - # The path where items should be mounted (comparable to mount points in - # Unix-like systems). This is “/” by default, meaning that items will have - # “/” prefixed to their identifiers. If the items root were “/en/” - # instead, an item at content/about.html would have an identifier of - # “/en/about/” instead of just “/about/”. - items_root: / - - # The path where layouts should be mounted. The layouts root behaves the - # same as the items root, but applies to layouts rather than items. - layouts_root: / - - # Whether to allow periods in identifiers. When turned off, everything - # past the first period is considered to be the extension, and when - # turned on, only the characters past the last period are considered to - # be the extension. For example, a file named “content/about.html.erb” - # will have the identifier “/about/” when turned off, but when turned on - # it will become “/about.html/” instead. - allow_periods_in_identifiers: false - -# Configuration for the “watch” command, which watches a site for changes and -# recompiles if necessary. -watcher: - # A list of directories to watch for changes. When editing this, make sure - # that the “output/” and “tmp/” directories are _not_ included in this list, - # because recompiling the site will cause these directories to change, which - # will cause the site to be recompiled, which will cause these directories - # to change, which will cause the site to be recompiled again, and so on. - dirs_to_watch: [ 'content', 'layouts', 'lib' ] - - # A list of single files to watch for changes. As mentioned above, don’t put - # any files from the “output/” or “tmp/” directories in here. - files_to_watch: [ 'config.yaml', 'Rules' ] - - # When to send notifications (using Growl or notify-send). - notify_on_compilation_success: true - notify_on_compilation_failure: true diff --git a/config.yaml.dist b/config.yaml.dist new file mode 100644 index 0000000..18d2280 --- /dev/null +++ b/config.yaml.dist @@ -0,0 +1,79 @@ +base_url: http://infra-status.gentoo.org + +# A list of file extensions that nanoc will consider to be textual rather than +# binary. If an item with an extension not in this list is found, the file +# will be considered as binary. +text_extensions: [ 'css', 'erb', 'haml', 'htm', 'html', 'js', 'less', 'markdown', 'md', 'php', 'rb', 'sass', 'scss', 'txt', 'xhtml', 'xml', 'coffee' ] + +# The path to the directory where all generated files will be written to. This +# can be an absolute path starting with a slash, but it can also be path +# relative to the site directory. +output_dir: output + +# A list of index filenames, i.e. names of files that will be served by a web +# server when a directory is requested. Usually, index files are named +# “index.html”, but depending on the web server, this may be something else, +# such as “default.htm”. This list is used by nanoc to generate pretty URLs. +index_filenames: [ 'index.html' ] + +# Whether or not to generate a diff of the compiled content when compiling a +# site. The diff will contain the differences between the compiled content +# before and after the last site compilation. +enable_output_diff: false + +prune: + # Whether to automatically remove files not managed by nanoc from the output + # directory. For safety reasons, this is turned off by default. + auto_prune: false + + # Which files and directories you want to exclude from pruning. If you version + # your output directory, you should probably exclude VCS directories such as + # .git, .svn etc. + exclude: [ '.git', '.hg', '.svn', 'CVS' ] + +# The data sources where nanoc loads its data from. This is an array of +# hashes; each array element represents a single data source. By default, +# there is only a single data source that reads data from the “content/” and +# “layout/” directories in the site directory. +data_sources: + - + # The type is the identifier of the data source. By default, this will be + # `filesystem_unified`. + type: filesystem_unified + + # The path where items should be mounted (comparable to mount points in + # Unix-like systems). This is “/” by default, meaning that items will have + # “/” prefixed to their identifiers. If the items root were “/en/” + # instead, an item at content/about.html would have an identifier of + # “/en/about/” instead of just “/about/”. + items_root: / + + # The path where layouts should be mounted. The layouts root behaves the + # same as the items root, but applies to layouts rather than items. + layouts_root: / + + # Whether to allow periods in identifiers. When turned off, everything + # past the first period is considered to be the extension, and when + # turned on, only the characters past the last period are considered to + # be the extension. For example, a file named “content/about.html.erb” + # will have the identifier “/about/” when turned off, but when turned on + # it will become “/about.html/” instead. + allow_periods_in_identifiers: false + +# Configuration for the “watch” command, which watches a site for changes and +# recompiles if necessary. +watcher: + # A list of directories to watch for changes. When editing this, make sure + # that the “output/” and “tmp/” directories are _not_ included in this list, + # because recompiling the site will cause these directories to change, which + # will cause the site to be recompiled, which will cause these directories + # to change, which will cause the site to be recompiled again, and so on. + dirs_to_watch: [ 'content', 'layouts', 'lib' ] + + # A list of single files to watch for changes. As mentioned above, don’t put + # any files from the “output/” or “tmp/” directories in here. + files_to_watch: [ 'config.yaml', 'Rules' ] + + # When to send notifications (using Growl or notify-send). + notify_on_compilation_success: true + notify_on_compilation_failure: true -- cgit v1.2.3-65-gdbad From 8bdf1ec8122edc8da92fe44c75c22efd0f0469b9 Mon Sep 17 00:00:00 2001 From: Alex Legler Date: Tue, 28 Feb 2012 13:19:41 +0100 Subject: .gitignore status.json and config.yaml --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index c019529..481b815 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ tmp output +status.json +config.yaml -- cgit v1.2.3-65-gdbad From 7010636695694f7d12a7673b06dfad81f1cb47ed Mon Sep 17 00:00:00 2001 From: Alex Legler Date: Tue, 28 Feb 2012 13:21:36 +0100 Subject: Replace hardcoded status.json location with app root --- lib/service-dsl.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/service-dsl.rb b/lib/service-dsl.rb index 42f94d4..ec80f24 100644 --- a/lib/service-dsl.rb +++ b/lib/service-dsl.rb @@ -50,7 +50,7 @@ module HelperMethods end class ServiceRegistry - StatusSource = "/tmp/status.json" + StatusSource = File.join(File.dirname(__FILE__), "..", "status.json") include Singleton include HelperMethods -- cgit v1.2.3-65-gdbad From 3ebb4138ce675441cdadc377eb0c6c6e1e146894 Mon Sep 17 00:00:00 2001 From: Alex Legler Date: Tue, 28 Feb 2012 13:27:24 +0100 Subject: Render an empty document when there are no items available. This still sucks but is better than the exception. --- content/atom.xml.erb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/content/atom.xml.erb b/content/atom.xml.erb index 6439efb..5087d08 100644 --- a/content/atom.xml.erb +++ b/content/atom.xml.erb @@ -4,4 +4,9 @@ author_name: Gentoo Infrastructure Team author_uri: http://infra-status.gentoo.org/ is_hidden: true --- -<%= atom_feed(:content_proc => feed_proc, :articles => feed_articles) %> +<%= begin + atom_feed(:content_proc => feed_proc, :articles => feed_articles) + rescue RuntimeError + "" + end +%> -- cgit v1.2.3-65-gdbad From 1438becbaf5a147e363e62c28665b1cb51984b1f Mon Sep 17 00:00:00 2001 From: Alex Legler Date: Wed, 25 Apr 2012 10:59:28 +0200 Subject: display masterportage and masterrsync status --- content/index.haml | 4 ++++ lib/services.rb | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/content/index.haml b/content/index.haml index 129f3e4..814068f 100644 --- a/content/index.haml +++ b/content/index.haml @@ -50,6 +50,10 @@ title: Index %td Bugzilla %td.status = service_icons 'bugzilla' + %tr + %td Master rsync mirror + %td.status + = service_icons 'rsync' %tr %td Devmanual %td.status diff --git a/lib/services.rb b/lib/services.rb index 35b1127..12d300e 100644 --- a/lib/services.rb +++ b/lib/services.rb @@ -63,6 +63,16 @@ Services do default 'motmot', 'http_sources' end + service 'rsync' do + if host_flapping? 'albatross' or host_flapping? 'kookaburra' + State::WARNING + elsif host_up? 'albatross' and host_up? 'kookaburra' + State::UP + else + State::DOWN + end + end + service 'bugzilla' do if service_flapping? 'yellowbishop', 'http_bugs' or service_flapping? 'yellowleg', 'http_bugs' State::WARNING -- cgit v1.2.3-65-gdbad From d72bad8e9d0441d8660fba946c07024ba3ecea11 Mon Sep 17 00:00:00 2001 From: Alex Legler Date: Wed, 25 Apr 2012 11:25:23 +0200 Subject: last update and generation dates --- content/css/screen.css | 4 ++++ content/index.haml | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/content/css/screen.css b/content/css/screen.css index c3970c9..c4ffdcf 100644 --- a/content/css/screen.css +++ b/content/css/screen.css @@ -44,6 +44,10 @@ h3 { font-weight: 600; } +.small { + font-size: 0.75em; +} + .site-title { background-color: #f5f5f5; border-bottom: 1px solid #e8e8e8; diff --git a/content/index.haml b/content/index.haml index 814068f..070fa91 100644 --- a/content/index.haml +++ b/content/index.haml @@ -95,3 +95,12 @@ title: Index .twelvecol.last %h2 Maintenance and Outage Notices = notices + +.container + .row + .eightcol + .fourcol.small.last + Last update: + = Time.now.rfc2822 +
Data retrieved: + = to_date(ServiceRegistry.instance.status_data['generated']) -- cgit v1.2.3-65-gdbad From 5a22e426025f88f13b1e941f5c7962f6b59080a3 Mon Sep 17 00:00:00 2001 From: Alex Legler Date: Wed, 25 Apr 2012 23:25:33 +0200 Subject: Actually define to_date --- lib/helpers.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/helpers.rb b/lib/helpers.rb index a66457f..e93fcff 100644 --- a/lib/helpers.rb +++ b/lib/helpers.rb @@ -134,3 +134,7 @@ end def base_url @site.config[:base_url] + '/' end + +def to_date(str) + Time.parse(str).rfc2822 +end -- cgit v1.2.3-65-gdbad From dc8301d75229afb185c812bf53f5f5dc183f1591 Mon Sep 17 00:00:00 2001 From: "Robin H. Johnson" Date: Tue, 6 Nov 2012 20:43:30 +0000 Subject: Always look before you leap into hashes. Signed-off-by: Robin H. Johnson --- lib/service-dsl.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/service-dsl.rb b/lib/service-dsl.rb index ec80f24..f6eaace 100644 --- a/lib/service-dsl.rb +++ b/lib/service-dsl.rb @@ -5,26 +5,34 @@ module HelperMethods # Checks if all hosts are up def all_hosts_up?(hosts) hosts.each do |host| - return false unless status_data['hosts'][host]['current_state'] == 0 + return false unless + status_data['hosts'].has_key?(host) and + status_data['hosts'][host]['current_state'] == 0 end true end def host_up?(host) + status_data['hosts'].has_key?(host) and status_data['hosts'][host]['current_state'] == 0 end def host_flapping?(host) + status_data['hosts'].has_key?(host) and status_data['hosts'][host]['is_flapping'] != 0 end # Checks if the service is up def service_up?(host, service) + status_data['services'].has_key?(host) and + status_data['services'][host].has_key?(service) and status_data['services'][host][service]['current_state'] == 0 end def service_flapping?(host, service) + status_data['services'].has_key?(host) and + status_data['services'][host].has_key?(service) and status_data['services'][host][service]['is_flapping'] != 0 end -- cgit v1.2.3-65-gdbad From ff345a500b095a81cde0fc627dc2581c140147ee Mon Sep 17 00:00:00 2001 From: "Robin H. Johnson" Date: Wed, 7 Nov 2012 03:32:05 +0000 Subject: Update checked things. --- lib/services.rb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/services.rb b/lib/services.rb index 12d300e..174a0c2 100644 --- a/lib/services.rb +++ b/lib/services.rb @@ -4,9 +4,9 @@ Services do service 'www' do - if service_flapping? 'ani', 'http_www' and service_flapping? 'auklet', 'http_www' and service_flapping? 'loon', 'http_www' + if service_flapping? 'avocet', 'http_www' and service_flapping? 'auklet', 'http_www' State::WARNING - elsif service_up? 'ani', 'http_www' or service_up? 'auklet', 'http_www' or service_up? 'loon', 'http_www' + elsif service_up? 'avocet', 'http_www' or service_up? 'auklet', 'http_www' State::UP else State::DOWN @@ -28,15 +28,15 @@ Services do end service 'planet' do - default 'barbet', 'http_planet' + default 'brambling', 'http_planet' end service 'pgo' do - default 'barbet', 'http_packages' + default 'brambling', 'http_packages' end service 'lists' do - default 'pigeon' + default 'pigeon', 'smtp_lists' end service 'archives' do @@ -48,7 +48,7 @@ Services do end service 'devmanual' do - default 'barbet', 'http_devmanual' + default 'brambling', 'http_devmanual' end service 'overlays' do @@ -90,14 +90,14 @@ Services do end service 'dgo_http' do - nil + default 'woodpecker', 'http_dev_ssl' end service 'dgo_smtp' do - nil + default 'woodpecker', 'smtp_dgo' end service 'dgo_mbox' do - nil + default 'woodpecker', 'imap_dgo' end end -- cgit v1.2.3-65-gdbad From 5677a684afe73d5dbe419350b52dca4061277176 Mon Sep 17 00:00:00 2001 From: "Robin H. Johnson" Date: Wed, 7 Nov 2012 03:43:47 +0000 Subject: Alter wording. Signed-off-by: Robin H. Johnson --- content/index.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/index.haml b/content/index.haml index 070fa91..51eba4e 100644 --- a/content/index.haml +++ b/content/index.haml @@ -100,7 +100,7 @@ title: Index .row .eightcol .fourcol.small.last - Last update: + Last site update: = Time.now.rfc2822
Data retrieved: = to_date(ServiceRegistry.instance.status_data['generated']) -- cgit v1.2.3-65-gdbad