mirror of
https://bitbucket.org/anguist/ntpa
synced 2026-10-01 07:08:04 +00:00
193 lines
6.6 KiB
C#
193 lines
6.6 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 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 BootstrapTableColumn[] columns = new[] {
|
|
new BootstrapTableColumn (),
|
|
new BootstrapTableColumn ("Name"),
|
|
new BootstrapTableColumn ("st", "aright"),
|
|
new BootstrapTableColumn ("when", "aright"),
|
|
new BootstrapTableColumn ("poll", "aright2"),
|
|
new BootstrapTableColumn ("reach", "aright2"),
|
|
new BootstrapTableColumn ("delay", "aright"),
|
|
new BootstrapTableColumn ("offset", "aright"),
|
|
new BootstrapTableColumn ("jitter", "aright"),
|
|
new BootstrapTableColumn ("iso "),
|
|
new BootstrapTableColumn ("location")
|
|
};
|
|
private readonly string ip;
|
|
private readonly DateTime next;
|
|
private readonly DateTime now;
|
|
private readonly HostPageConfiguration page;
|
|
|
|
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 () + " ");
|
|
builder.Append (TimeZoneInfo.Local.StandardName + " ");
|
|
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 (BootstrapTableColumn column in columns) {
|
|
builder.Append (column);
|
|
}
|
|
|
|
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 (BootstrapTableColumn column in columns) {
|
|
builder.Append (column.FooterString);
|
|
}
|
|
|
|
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 »</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 (BootstrapTableColumn column in columns) {
|
|
builder.Append (column.SpacerString);
|
|
}
|
|
|
|
builder.AppendLine ("</tr>");
|
|
|
|
return builder.ToString ();
|
|
}
|
|
|
|
private string GetPoolMemberLink ()
|
|
{
|
|
return "http://www.pool.ntp.org/scores/" + ip;
|
|
}
|
|
|
|
private sealed class BootstrapTableColumn
|
|
{
|
|
public BootstrapTableColumn (string name, string cssClass)
|
|
{
|
|
this.name = name;
|
|
this.cssClass = cssClass;
|
|
}
|
|
|
|
public BootstrapTableColumn (string name)
|
|
{
|
|
this.name = name;
|
|
this.cssClass = null;
|
|
}
|
|
|
|
public BootstrapTableColumn ()
|
|
{
|
|
this.name = " ";
|
|
this.cssClass = null;
|
|
}
|
|
|
|
private readonly string name;
|
|
private readonly string cssClass;
|
|
|
|
public override string ToString ()
|
|
{
|
|
return cssClass != null ?
|
|
String.Format (@"<th class=""{1}"">{0}</th>", name, cssClass) : String.Format (@"<th>{0}</th>", name);
|
|
}
|
|
|
|
public string SpacerString {
|
|
get {
|
|
return String.Format (@"<td class=""spc{0}""> </td>", cssClass != null ? " " + cssClass : String.Empty);
|
|
}
|
|
}
|
|
|
|
public string FooterString {
|
|
get {
|
|
return String.Format (@"<td class=""but{0}""> </td>", cssClass != null ? " " + cssClass : String.Empty);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |