Files
ntpa/Ntp.Analyzer/Render/Host/BootstrapHostTableRender.cs
T
2016-03-05 14:06:38 +01:00

154 lines
4.7 KiB
C#

//
// BootstrapHostTableRender.cs
//
// Author:
// Carsten Sonne Larsen <cs@innolan.dk>
//
// Copyright (c) 2013 Carsten Sonne Larsen
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using System.Text;
using System.Collections.Generic;
using Ntp.Analyzer.Config.Page;
namespace Ntp.Analyzer.Render.Host
{
public sealed class BootstrapHostTableRender : HtmlObjectRender
{
public BootstrapHostTableRender (
HostPageConfiguration page,
string ip,
DateTime now,
DateTime next)
: base(page.WebPath)
{
this.page = page;
this.ip = ip;
this.now = now;
this.next = next;
}
private readonly HostPageConfiguration page;
private readonly string ip;
private readonly DateTime now;
private readonly DateTime next;
private string[] columns = new string[] {
"&nbsp;",
"Name",
"st",
"when",
"poll",
"reach",
"&nbsp;delay",
"offset",
"jitter",
"iso&nbsp;",
"location"
};
public override string RenderHead ()
{
StringBuilder builder = new StringBuilder ();
builder.AppendLine (@"<div class=""container theme-showcase"">");
builder.AppendLine (@"<div class=""jumbotron"">");
builder.Append ("<h1>");
builder.Append (page.ServerName);
builder.AppendLine ("</h1>");
builder.Append ("<p>");
builder.Append (now.ToLongDateString () + " CEST ");
builder.Append (now.ToLongTimeString () + ". ");
builder.Append ("Next refresh scheduled at ");
builder.Append (next.ToShortTimeString ());
builder.AppendLine (".</p>");
builder.AppendLine (@"<div class=""table-responsive"">");
builder.Append ("<table><tr>");
foreach (string column in columns) {
builder.Append ("<th>");
builder.Append (column);
builder.Append ("</th>");
}
builder.AppendLine ("</tr>");
builder.Append (MakeSpacer ());
return builder.ToString ();
}
public override string Render ()
{
return String.Empty;
}
public override string RenderFooter ()
{
StringBuilder builder = new StringBuilder ();
builder.Append (MakeSpacer ());
builder.Append ("<tr>");
foreach (string column in columns) {
builder.Append (@"<td class=""but"">&nbsp;</td>");
}
builder.AppendLine ("</tr>");
builder.AppendLine ("</table>");
builder.AppendLine ("</div>");
if (page.PoolMember) {
builder.Append (@"<p class=""pool""><a class=""btn btn-lg btn-primary"" ");
builder.AppendFormat (@"href=""{0}"">View info on pool.ntp.org &raquo;</a></p>", GetPoolMemberLink ());
builder.AppendLine ();
}
builder.AppendLine ("</div>");
builder.AppendLine ("</div>");
return builder.ToString ();
}
private string MakeSpacer ()
{
StringBuilder builder = new StringBuilder ();
builder.Append ("<tr>");
foreach (string column in columns) {
builder.Append (@"<td class=""spc"">&nbsp;</td>");
}
builder.AppendLine ("</tr>");
return builder.ToString ();
}
private string GetPoolMemberLink ()
{
return "http://www.pool.ntp.org/scores/" + ip;
}
}
}