mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-10 15:32:37 -07:00
More work on #298. Everything wired up
This commit is contained in:
parent
81d26a5442
commit
fcf2c84f61
22 changed files with 614 additions and 33 deletions
|
@ -64,6 +64,7 @@
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
|
11
PlexRequests.Api.Interfaces/app.config
Normal file
11
PlexRequests.Api.Interfaces/app.config
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -90,6 +90,7 @@
|
||||||
<Compile Include="Tv\TvShowImages.cs" />
|
<Compile Include="Tv\TvShowImages.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
11
PlexRequests.Api.Models/app.config
Normal file
11
PlexRequests.Api.Models/app.config
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -26,6 +26,8 @@
|
||||||
#endregion
|
#endregion
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace PlexRequests.Core.SettingModels
|
namespace PlexRequests.Core.SettingModels
|
||||||
{
|
{
|
||||||
public class LandingPageSettings : Settings
|
public class LandingPageSettings : Settings
|
||||||
|
@ -37,5 +39,8 @@ namespace PlexRequests.Core.SettingModels
|
||||||
public bool EnabledNoticeTime { get; set; }
|
public bool EnabledNoticeTime { get; set; }
|
||||||
public DateTime NoticeStart { get; set; }
|
public DateTime NoticeStart { get; set; }
|
||||||
public DateTime NoticeEnd { get; set; }
|
public DateTime NoticeEnd { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public bool NoticeActive => DateTime.Now > NoticeEnd || DateTime.Now < NoticeStart;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -44,6 +44,7 @@ namespace PlexRequests.Core.SettingModels
|
||||||
public bool UsersCanViewOnlyOwnIssues { get; set; }
|
public bool UsersCanViewOnlyOwnIssues { get; set; }
|
||||||
public int WeeklyRequestLimit { get; set; }
|
public int WeeklyRequestLimit { get; set; }
|
||||||
public string NoApprovalUsers { get; set; }
|
public string NoApprovalUsers { get; set; }
|
||||||
|
public bool CollectAnalyticData { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The CSS name of the theme we want
|
/// The CSS name of the theme we want
|
||||||
|
|
|
@ -57,13 +57,13 @@ namespace PlexRequests.Core
|
||||||
var version = CheckSchema();
|
var version = CheckSchema();
|
||||||
if (version > 0)
|
if (version > 0)
|
||||||
{
|
{
|
||||||
if (version > 1700 && version <= 1759)
|
if (version > 1700 && version <= 1799)
|
||||||
{
|
{
|
||||||
MigrateToVersion1700();
|
MigrateToVersion1700();
|
||||||
}
|
}
|
||||||
if (version > 1759 && version <= 1799)
|
if (version > 1799 && version <= 1800)
|
||||||
{
|
{
|
||||||
MigrateToVersion1760();
|
MigrateToVersion1800();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,10 +181,13 @@ namespace PlexRequests.Core
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Migrates to version 1.8.
|
/// Migrates to version 1.8.
|
||||||
/// <para>This includes updating the admin account to have all roles.</para>
|
/// <para>This includes updating the admin account to have all roles.</para>
|
||||||
/// <para>Set the log level to info</para>
|
/// <para>Set the log level to Error</para>
|
||||||
|
/// <para>Enable Analytics by default</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void MigrateToVersion1760()
|
private void MigrateToVersion1800()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Give admin all roles/claims
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var userMapper = new UserMapper(new UserRepository<UsersModel>(Db, new MemoryCacheProvider()));
|
var userMapper = new UserMapper(new UserRepository<UsersModel>(Db, new MemoryCacheProvider()));
|
||||||
|
@ -201,14 +204,15 @@ namespace PlexRequests.Core
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Log.Error(e);
|
Log.Error(e);
|
||||||
throw;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Set log level
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var settingsService = new SettingsServiceV2<LogSettings>(new SettingsJsonRepository(Db, new MemoryCacheProvider()));
|
var settingsService = new SettingsServiceV2<LogSettings>(new SettingsJsonRepository(Db, new MemoryCacheProvider()));
|
||||||
var logSettings = settingsService.GetSettings();
|
var logSettings = settingsService.GetSettings();
|
||||||
logSettings.Level = LogLevel.Info.Ordinal;
|
logSettings.Level = LogLevel.Error.Ordinal;
|
||||||
settingsService.SaveSettings(logSettings);
|
settingsService.SaveSettings(logSettings);
|
||||||
|
|
||||||
LoggingHelper.ReconfigureLogLevel(LogLevel.FromOrdinal(logSettings.Level));
|
LoggingHelper.ReconfigureLogLevel(LogLevel.FromOrdinal(logSettings.Level));
|
||||||
|
@ -217,10 +221,24 @@ namespace PlexRequests.Core
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Log.Error(e);
|
Log.Error(e);
|
||||||
throw;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Enable analytics;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
var prSettings = new SettingsServiceV2<PlexRequestSettings>(new SettingsJsonRepository(Db, new MemoryCacheProvider()));
|
||||||
|
var settings = prSettings.GetSettings();
|
||||||
|
settings.CollectAnalyticData = true;
|
||||||
|
var updated = prSettings.SaveSettings(settings);
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.Error(e);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
33
PlexRequests.Helpers/Analytics/Action.cs
Normal file
33
PlexRequests.Helpers/Analytics/Action.cs
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: Action.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
namespace PlexRequests.Helpers.Analytics
|
||||||
|
{
|
||||||
|
public enum Action
|
||||||
|
{
|
||||||
|
Donate
|
||||||
|
}
|
||||||
|
}
|
240
PlexRequests.Helpers/Analytics/Analytics.cs
Normal file
240
PlexRequests.Helpers/Analytics/Analytics.cs
Normal file
|
@ -0,0 +1,240 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: Analytics.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Web;
|
||||||
|
|
||||||
|
using NLog;
|
||||||
|
|
||||||
|
using HttpUtility = Nancy.Helpers.HttpUtility;
|
||||||
|
|
||||||
|
namespace PlexRequests.Helpers.Analytics
|
||||||
|
{
|
||||||
|
public class Analytics : IAnalytics
|
||||||
|
{
|
||||||
|
private const string AnalyticsUri = "http://www.google-analytics.com/collect";
|
||||||
|
private const string RequestMethod = "POST";
|
||||||
|
private const string TrackingId = "UA-77083919-2";
|
||||||
|
|
||||||
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
public void TrackEvent(Category category, Action action, string label, string username, int? value = null)
|
||||||
|
{
|
||||||
|
var cat = category.ToString();
|
||||||
|
var act = action.ToString();
|
||||||
|
Track(HitType.@event, username, cat, act, label, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task TrackEventAsync(Category category, Action action, string label, string username, int? value = null)
|
||||||
|
{
|
||||||
|
var cat = category.ToString();
|
||||||
|
var act = action.ToString();
|
||||||
|
await TrackAsync(HitType.@event, username, cat, act, label, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void TrackPageview(Category category, Action action, string label, string username, int? value = null)
|
||||||
|
{
|
||||||
|
var cat = category.ToString();
|
||||||
|
var act = action.ToString();
|
||||||
|
Track(HitType.@pageview, username, cat, act, label, value);
|
||||||
|
}
|
||||||
|
public async Task TrackPageviewAsync(Category category, Action action, string label, string username, int? value = null)
|
||||||
|
{
|
||||||
|
var cat = category.ToString();
|
||||||
|
var act = action.ToString();
|
||||||
|
await TrackAsync(HitType.@pageview, username, cat, act, label, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void TrackException(string message, string username, bool fatal)
|
||||||
|
{
|
||||||
|
var fatalInt = fatal ? 1 : 0;
|
||||||
|
Track(HitType.exception, message, fatalInt, username);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task TrackExceptionAsync(string message, string username, bool fatal)
|
||||||
|
{
|
||||||
|
var fatalInt = fatal ? 1 : 0;
|
||||||
|
await TrackAsync(HitType.exception, message, fatalInt, username);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Track(HitType type, string username, string category, string action, string label, int? value = null)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(category)) throw new ArgumentNullException(nameof(category));
|
||||||
|
if (string.IsNullOrEmpty(action)) throw new ArgumentNullException(nameof(action));
|
||||||
|
if (string.IsNullOrEmpty(username)) throw new ArgumentNullException(nameof(username));
|
||||||
|
|
||||||
|
var postData = BuildRequestData(type, username, category, action, label, value, null, null);
|
||||||
|
|
||||||
|
var postDataString = postData
|
||||||
|
.Aggregate("", (data, next) => string.Format($"{data}&{next.Key}={HttpUtility.UrlEncode(next.Value)}"))
|
||||||
|
.TrimEnd('&');
|
||||||
|
|
||||||
|
SendRequest(postDataString);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task TrackAsync(HitType type, string username, string category, string action, string label, int? value = null)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(category)) throw new ArgumentNullException(nameof(category));
|
||||||
|
if (string.IsNullOrEmpty(action)) throw new ArgumentNullException(nameof(action));
|
||||||
|
if (string.IsNullOrEmpty(username)) throw new ArgumentNullException(nameof(username));
|
||||||
|
|
||||||
|
var postData = BuildRequestData(type, username, category, action, label, value, null, null);
|
||||||
|
|
||||||
|
var postDataString = postData
|
||||||
|
.Aggregate("", (data, next) => string.Format($"{data}&{next.Key}={HttpUtility.UrlEncode(next.Value)}"))
|
||||||
|
.TrimEnd('&');
|
||||||
|
|
||||||
|
await SendRequestAsync(postDataString);
|
||||||
|
}
|
||||||
|
private async Task TrackAsync(HitType type, string message, int fatal, string username)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(message)) throw new ArgumentNullException(nameof(message));
|
||||||
|
if (string.IsNullOrEmpty(username)) throw new ArgumentNullException(nameof(username));
|
||||||
|
|
||||||
|
var postData = BuildRequestData(type, username, null, null, null, null, message, fatal);
|
||||||
|
|
||||||
|
var postDataString = postData
|
||||||
|
.Aggregate("", (data, next) => string.Format($"{data}&{next.Key}={HttpUtility.UrlEncode(next.Value)}"))
|
||||||
|
.TrimEnd('&');
|
||||||
|
|
||||||
|
await SendRequestAsync(postDataString);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Track(HitType type, string message, int fatal, string username)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(message)) throw new ArgumentNullException(nameof(message));
|
||||||
|
if (string.IsNullOrEmpty(username)) throw new ArgumentNullException(nameof(username));
|
||||||
|
|
||||||
|
var postData = BuildRequestData(type, username, null, null, null, null, message, fatal);
|
||||||
|
|
||||||
|
var postDataString = postData
|
||||||
|
.Aggregate("", (data, next) => string.Format($"{data}&{next.Key}={HttpUtility.UrlEncode(next.Value)}"))
|
||||||
|
.TrimEnd('&');
|
||||||
|
|
||||||
|
SendRequest(postDataString);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SendRequest(string postDataString)
|
||||||
|
{
|
||||||
|
var request = (HttpWebRequest)WebRequest.Create(AnalyticsUri);
|
||||||
|
request.Method = RequestMethod;
|
||||||
|
// set the Content-Length header to the correct value
|
||||||
|
request.ContentLength = Encoding.UTF8.GetByteCount(postDataString);
|
||||||
|
|
||||||
|
// write the request body to the request
|
||||||
|
using (var writer = new StreamWriter(request.GetRequestStream()))
|
||||||
|
{
|
||||||
|
writer.Write(postDataString);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var webResponse = (HttpWebResponse)request.GetResponse();
|
||||||
|
if (webResponse.StatusCode != HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
throw new HttpException((int)webResponse.StatusCode, "Google Analytics tracking did not return OK 200");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.Error(ex, "Analytics tracking failed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private async Task SendRequestAsync(string postDataString)
|
||||||
|
{
|
||||||
|
var request = (HttpWebRequest)WebRequest.Create(AnalyticsUri);
|
||||||
|
request.Method = RequestMethod;
|
||||||
|
// set the Content-Length header to the correct value
|
||||||
|
request.ContentLength = Encoding.UTF8.GetByteCount(postDataString);
|
||||||
|
|
||||||
|
// write the request body to the request
|
||||||
|
using (var writer = new StreamWriter(request.GetRequestStream()))
|
||||||
|
{
|
||||||
|
await writer.WriteAsync(postDataString);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var webResponse = (HttpWebResponse)await request.GetResponseAsync();
|
||||||
|
if (webResponse.StatusCode != HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
throw new HttpException((int)webResponse.StatusCode, "Google Analytics tracking did not return OK 200");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.Error(ex, "Analytics tracking failed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Dictionary<string, string> BuildRequestData(HitType type, string username, string category, string action, string label, int? value, string exceptionDescription, int? fatal)
|
||||||
|
{
|
||||||
|
var postData = new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
{ "v", "1" },
|
||||||
|
{ "tid", TrackingId },
|
||||||
|
{ "t", type.ToString() },
|
||||||
|
{"cid", "" }
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(username))
|
||||||
|
{
|
||||||
|
postData.Add("uid", username);
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrEmpty(label))
|
||||||
|
{
|
||||||
|
postData.Add("el", label);
|
||||||
|
}
|
||||||
|
if (value.HasValue)
|
||||||
|
{
|
||||||
|
postData.Add("ev", value.ToString());
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrEmpty(category))
|
||||||
|
{
|
||||||
|
postData.Add("ec", category);
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrEmpty(action))
|
||||||
|
{
|
||||||
|
postData.Add("ea", action);
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrEmpty(exceptionDescription))
|
||||||
|
{
|
||||||
|
postData.Add("exd", exceptionDescription);
|
||||||
|
}
|
||||||
|
if (fatal.HasValue)
|
||||||
|
{
|
||||||
|
postData.Add("exf", fatal.ToString());
|
||||||
|
}
|
||||||
|
return postData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
40
PlexRequests.Helpers/Analytics/Category.cs
Normal file
40
PlexRequests.Helpers/Analytics/Category.cs
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: Category.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
namespace PlexRequests.Helpers.Analytics
|
||||||
|
{
|
||||||
|
public enum Category
|
||||||
|
{
|
||||||
|
Startup,
|
||||||
|
Search,
|
||||||
|
Requests,
|
||||||
|
Admin,
|
||||||
|
LandingPage,
|
||||||
|
Api,
|
||||||
|
Issues,
|
||||||
|
UserLogin
|
||||||
|
}
|
||||||
|
}
|
36
PlexRequests.Helpers/Analytics/HitType.cs
Normal file
36
PlexRequests.Helpers/Analytics/HitType.cs
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: HitType.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
// ReSharper disable InconsistentNaming
|
||||||
|
namespace PlexRequests.Helpers.Analytics
|
||||||
|
{
|
||||||
|
internal enum HitType
|
||||||
|
{
|
||||||
|
@event,
|
||||||
|
@pageview,
|
||||||
|
@exception
|
||||||
|
}
|
||||||
|
}
|
92
PlexRequests.Helpers/Analytics/IAnalytics.cs
Normal file
92
PlexRequests.Helpers/Analytics/IAnalytics.cs
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: IAnalytics.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace PlexRequests.Helpers.Analytics
|
||||||
|
{
|
||||||
|
public interface IAnalytics
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Tracks the event.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="category">The category.</param>
|
||||||
|
/// <param name="action">The action.</param>
|
||||||
|
/// <param name="label">The label.</param>
|
||||||
|
/// <param name="username">The username.</param>
|
||||||
|
/// <param name="value">The value.</param>
|
||||||
|
void TrackEvent(Category category, Action action, string label, string username, int? value = null);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tracks the event asynchronous.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="category">The category.</param>
|
||||||
|
/// <param name="action">The action.</param>
|
||||||
|
/// <param name="label">The label.</param>
|
||||||
|
/// <param name="username">The username.</param>
|
||||||
|
/// <param name="value">The value.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task TrackEventAsync(Category category, Action action, string label, string username, int? value = null);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tracks the page view.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="category">The category.</param>
|
||||||
|
/// <param name="action">The action.</param>
|
||||||
|
/// <param name="label">The label.</param>
|
||||||
|
/// <param name="username">The username.</param>
|
||||||
|
/// <param name="value">The value.</param>
|
||||||
|
void TrackPageview(Category category, Action action, string label, string username, int? value = null);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tracks the page view asynchronous.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="category">The category.</param>
|
||||||
|
/// <param name="action">The action.</param>
|
||||||
|
/// <param name="label">The label.</param>
|
||||||
|
/// <param name="username">The username.</param>
|
||||||
|
/// <param name="value">The value.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task TrackPageviewAsync(Category category, Action action, string label, string username, int? value = null);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tracks the exception.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="message">The message.</param>
|
||||||
|
/// <param name="username">The username.</param>
|
||||||
|
/// <param name="fatal">if set to <c>true</c> [fatal].</param>
|
||||||
|
void TrackException(string message, string username, bool fatal);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tracks the exception asynchronous.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="message">The message.</param>
|
||||||
|
/// <param name="username">The username.</param>
|
||||||
|
/// <param name="fatal">if set to <c>true</c> [fatal].</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task TrackExceptionAsync(string message, string username, bool fatal);
|
||||||
|
}
|
||||||
|
}
|
|
@ -31,13 +31,26 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="Hangfire.Core, Version=1.5.7.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Hangfire.Core.1.5.7\lib\net45\Hangfire.Core.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Nancy, Version=1.4.2.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Nancy.1.4.3\lib\net40\Nancy.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.4.3.4\lib\net45\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.4.3.4\lib\net45\NLog.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Runtime.Caching" />
|
<Reference Include="System.Runtime.Caching" />
|
||||||
|
<Reference Include="System.Web" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
@ -49,6 +62,11 @@
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="Analytics\Action.cs" />
|
||||||
|
<Compile Include="Analytics\Analytics.cs" />
|
||||||
|
<Compile Include="Analytics\Category.cs" />
|
||||||
|
<Compile Include="Analytics\HitType.cs" />
|
||||||
|
<Compile Include="Analytics\IAnalytics.cs" />
|
||||||
<Compile Include="AssemblyHelper.cs" />
|
<Compile Include="AssemblyHelper.cs" />
|
||||||
<Compile Include="ByteConverterHelper.cs" />
|
<Compile Include="ByteConverterHelper.cs" />
|
||||||
<Compile Include="DateTimeHelper.cs" />
|
<Compile Include="DateTimeHelper.cs" />
|
||||||
|
@ -68,6 +86,7 @@
|
||||||
<Compile Include="UserClaims.cs" />
|
<Compile Include="UserClaims.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup />
|
<ItemGroup />
|
||||||
|
|
11
PlexRequests.Helpers/app.config
Normal file
11
PlexRequests.Helpers/app.config
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -1,5 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
|
<package id="Hangfire.Core" version="1.5.7" targetFramework="net45" />
|
||||||
|
<package id="Nancy" version="1.4.3" targetFramework="net45" />
|
||||||
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net45" />
|
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net45" />
|
||||||
<package id="NLog" version="4.3.4" targetFramework="net45" />
|
<package id="NLog" version="4.3.4" targetFramework="net45" />
|
||||||
|
<package id="Owin" version="1.0" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
|
@ -91,6 +91,7 @@
|
||||||
<Compile Include="Models\Audit.cs" />
|
<Compile Include="Models\Audit.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
<None Include="sqlite3.dll">
|
<None Include="sqlite3.dll">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
|
11
PlexRequests.Store/app.config
Normal file
11
PlexRequests.Store/app.config
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -52,6 +52,7 @@ using PlexRequests.Store.Repository;
|
||||||
using PlexRequests.UI.Helpers;
|
using PlexRequests.UI.Helpers;
|
||||||
using Nancy.Json;
|
using Nancy.Json;
|
||||||
|
|
||||||
|
using PlexRequests.Helpers.Analytics;
|
||||||
using PlexRequests.Services.Jobs;
|
using PlexRequests.Services.Jobs;
|
||||||
using PlexRequests.UI.Jobs;
|
using PlexRequests.UI.Jobs;
|
||||||
|
|
||||||
|
@ -100,6 +101,8 @@ namespace PlexRequests.UI
|
||||||
container.Register<ISickRageCacher, SickRageCacher>();
|
container.Register<ISickRageCacher, SickRageCacher>();
|
||||||
container.Register<IJobFactory, CustomJobFactory>();
|
container.Register<IJobFactory, CustomJobFactory>();
|
||||||
|
|
||||||
|
container.Register<IAnalytics, Analytics>();
|
||||||
|
|
||||||
// Api
|
// Api
|
||||||
container.Register<ICouchPotatoApi, CouchPotatoApi>();
|
container.Register<ICouchPotatoApi, CouchPotatoApi>();
|
||||||
container.Register<IPushbulletApi, PushbulletApi>();
|
container.Register<IPushbulletApi, PushbulletApi>();
|
||||||
|
|
|
@ -45,6 +45,7 @@ using System.Windows.Forms;
|
||||||
|
|
||||||
using CommandLine;
|
using CommandLine;
|
||||||
|
|
||||||
|
using PlexRequests.Helpers.Analytics;
|
||||||
using PlexRequests.UI.Start;
|
using PlexRequests.UI.Start;
|
||||||
|
|
||||||
namespace PlexRequests.UI
|
namespace PlexRequests.UI
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#endregion
|
#endregion
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
|
using Nancy.Helpers;
|
||||||
|
|
||||||
using NLog;
|
using NLog;
|
||||||
|
|
||||||
using Owin;
|
using Owin;
|
||||||
|
|
|
@ -87,7 +87,7 @@
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class='input-group date' id='endDate'>
|
<div class='input-group date' id='endDate'>
|
||||||
<input type='text' class="form-control" value="@Model.NoticeStart"/>
|
<input type='text' class="form-control" value="@Model.NoticeEnd"/>
|
||||||
<span class="input-group-addon">
|
<span class="input-group-addon">
|
||||||
<span class="glyphicon glyphicon-calendar"></span>
|
<span class="glyphicon glyphicon-calendar"></span>
|
||||||
</span>
|
</span>
|
||||||
|
@ -120,6 +120,7 @@
|
||||||
$('#startDate').data("DateTimePicker").maxDate(e.date);
|
$('#startDate').data("DateTimePicker").maxDate(e.date);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#save').click(function (e) {
|
||||||
var start = '';
|
var start = '';
|
||||||
var end = '';
|
var end = '';
|
||||||
if ($startDate.data("DateTimePicker").date()) {
|
if ($startDate.data("DateTimePicker").date()) {
|
||||||
|
@ -129,7 +130,6 @@
|
||||||
end = $endDate.data("DateTimePicker").date().toISOString();
|
end = $endDate.data("DateTimePicker").date().toISOString();
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#save').click(function (e) {
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
var $form = $("#mainForm");
|
var $form = $("#mainForm");
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
|
|
||||||
|
@using PlexRequests.UI.Helpers
|
||||||
@inherits PlexRequests.UI.Helpers.EmptyViewBase<PlexRequests.UI.Models.LandingPageViewModel>
|
@inherits PlexRequests.UI.Helpers.EmptyViewBase<PlexRequests.UI.Models.LandingPageViewModel>
|
||||||
|
|
||||||
|
|
||||||
<img class="center" src="~/Content/images/logo.png" width="300" />
|
<img class="center" src="~/Content/images/logo.png" width="300" />
|
||||||
|
|
||||||
<div id="area" class="landing-block">
|
<div id="area" class="landing-block">
|
||||||
@if (Model.NoticeEnable)
|
@if (Model.NoticeEnable && Model.NoticeActive)
|
||||||
{
|
{
|
||||||
<div class="row" style="padding-top: 20px">
|
<div class="row" style="padding-top: 20px">
|
||||||
<div class="col-md-1 col-md-push-3">
|
<div class="col-md-1 col-md-push-3">
|
||||||
|
@ -13,25 +12,25 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-5 col-md-push-3">
|
<div class="col-md-5 col-md-push-3">
|
||||||
<span class="landing-title">Notice</span>
|
<span class="landing-title">Notice</span>
|
||||||
<br/>
|
<br />
|
||||||
@Model.NoticeMessage
|
@Model.NoticeMessage
|
||||||
<br/>
|
<br />
|
||||||
<strong>6/27/2016 @@ 9:00PM CST to 6/27/2016 @@ 9:00PM CST</strong>
|
<strong><span id="startDate"></span> <span id="endDate"></span></strong>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
<br />
|
||||||
<br/>
|
<br />
|
||||||
<br/>
|
<br />
|
||||||
<br/>
|
<br />
|
||||||
}
|
}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-1 col-md-push-3">
|
<div class="col-md-1 col-md-push-3">
|
||||||
<i class="fa fa-check-circle fa-5x"></i>
|
<i id="statusIcon" class="fa fa-spinner fa-spin fa-5x fa-fw"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-5 col-md-push-3">
|
<div class="col-md-5 col-md-push-3">
|
||||||
<span class="landing-title">Currently Online</span>
|
<span id="statusTitle" class="landing-title">Loading...</span>
|
||||||
<br/>
|
<br />
|
||||||
The Plex server is currently online (check this page for continuous status updates)
|
The Plex server is <strong><span id="statusText">Loading...</span></strong> (check this page for continuous status updates)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -39,3 +38,45 @@
|
||||||
<div style="text-align: center; margin-top: 10px">
|
<div style="text-align: center; margin-top: 10px">
|
||||||
<a href="@Model.ContinueUrl?landing=false" class="btn btn-success-outline">Continue</a>
|
<a href="@Model.ContinueUrl?landing=false" class="btn btn-success-outline">Continue</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
@if (Model.NoticeEnable && Model.NoticeActive)
|
||||||
|
{
|
||||||
|
<text>
|
||||||
|
var start = moment("@Model.NoticeStart.ToString("O")");
|
||||||
|
var end = moment("@Model.NoticeEnd.ToString("O")");
|
||||||
|
|
||||||
|
var text = "for " + start.to(end, true);
|
||||||
|
$('#startDate').html(start.toString());
|
||||||
|
$('#endDate').html(text);
|
||||||
|
</text>
|
||||||
|
}
|
||||||
|
var base = "@Html.GetBaseUrl()";
|
||||||
|
var url = createBaseUrl(base, "landing/status");
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "GET",
|
||||||
|
url: url,
|
||||||
|
dataType: "json",
|
||||||
|
success: function (response) {
|
||||||
|
$('#statusIcon').removeClass("fa-spinner fa-spin fa-fw");
|
||||||
|
if (response === true) {
|
||||||
|
//fa fa-check-circle fa-5x
|
||||||
|
$('#statusIcon').addClass("fa-check-circle");
|
||||||
|
$('#statusText').text("currently online");
|
||||||
|
$('#statusTitle').text("Currently Online");
|
||||||
|
} else {
|
||||||
|
$('#statusIcon').addClass("fa-times-circle");
|
||||||
|
$('#statusText').text("currently offline");
|
||||||
|
$('#statusTitle').text("Currently Offline");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (e) {
|
||||||
|
console.log(e);
|
||||||
|
$('#statusIcon').addClass("fa-times-circle");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
Loading…
Add table
Add a link
Reference in a new issue