初始化

This commit is contained in:
2025-12-11 14:04:39 +08:00
commit 1f65bbf628
2676 changed files with 838983 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "10.0.0",
"commands": [
"dotnet-ef"
],
"rollForward": false
}
}
}

7
看板定阅/1.js Normal file
View File

@@ -0,0 +1,7 @@
module.exports = {
apps: [{
name: "kanbandingyue",
script: "./看板定阅.exe",
args: "--urls http://0.0.0.0:19031"
}]
};

60
看板定阅/2.txt Normal file
View File

@@ -0,0 +1,60 @@
# HELP UDP_Upload Total bytes uploaded via UDP.
# TYPE UDP_Upload gauge
UDP_Upload 2
# HELP UDP_Sent Total UDP packets sent.
# TYPE UDP_Sent gauge
UDP_Sent 798
# HELP RCU_Online Current number of online RCU units.
# TYPE RCU_Online gauge
RCU_Online 798
# HELP RCU_TakeCard Total number of card take operations performed by RCU units.
# TYPE RCU_TakeCard gauge
RCU_TakeCard 75
# HELP RCU_Heart Total number of heartbeats received from RCU units.
# TYPE RCU_Heart gauge
RCU_Heart 0
# HELP RCU_SearchHost Total number of host search operations performed by RCU units.
# TYPE RCU_SearchHost gauge
RCU_SearchHost 216
# HELP Intercept Number of intercept operations or intercepted items.
# TYPE Intercept gauge
Intercept 701
# HELP WebUser Number of active web users currently connected.
# TYPE WebUser gauge
WebUser 0
# HELP Energy Current energy consumption or energy level.
# TYPE Energy gauge
Energy 0
# HELP RCU_0E Number of RCU units with type 0E status.
# TYPE RCU_0E gauge
RCU_OE 0
# HELP TCL_Ctr Control counter or status for TCL devices.
# TYPE TCL_Ctr gauge
TCL_Ctr 0
# HELP TM_Ctr Control counter or status for TM devices.
# TYPE TM_Ctr gauge
TM_Ctr 0
# HELP XD_Ctr Control counter or status for XD devices.
# TYPE XD_Ctr gauge
XD_Ctr 0
# HELP Hivi_Ctr Control counter or status for Hivi devices.
# TYPE Hivi_Ctr gauge
Hivi_Ctr 0
# HELP UDP_Cnt_Wireshark Total UDP packets captured and analyzed by Wireshark.
# TYPE UDP_Cnt_Wireshark gauge
UDP_Cnt_Wireshark 0

View File

@@ -0,0 +1,38 @@
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using .Models;
namespace .Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
return View();
}
[HttpPost()]
public IActionResult Monitor(string deviceid)
{
WaiBuJianKong.data.device_id= deviceid;
return View();
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}

View File

@@ -0,0 +1,9 @@
namespace .Models
{
public class ErrorViewModel
{
public string? RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
}
}

View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Common
{
public class grafana_data
{
public string? device_id { get; set; } = "80";
public string? device_status { get; set; } = "0";
public string? realtime_value { get; set; }= "0";
public string? environment_value { get; set; }="0";
public string? mcu_temperature { get; set; } = "0";
public string? sensor_temperature { get; set; }= "0";
public string? sensor_humidity { get; set; } = "0";
public string? adc_raw_value { get; set; } = "0";
}
}

View File

@@ -0,0 +1,20 @@
using System.Text;
using Common;
namespace .Models
{
public class WaiBuJianKong
{
public static string WaiBuJianKongSourceFileName = "Para_copy.yaml";
public static string WaiBuJianKongTargetFileName = "C:\\Program Files\\windows_exporter\\textfile_inputs\\Para.prom";
public static string Data = "";
static WaiBuJianKong()
{
string getdata = File.ReadAllText(WaiBuJianKongSourceFileName, Encoding.UTF8);
Data = getdata;
}
public static grafana_data data = new grafana_data();
}
}

View File

@@ -0,0 +1,60 @@
# HELP UDP_Upload Total bytes uploaded via UDP.
# TYPE UDP_Upload gauge
UDP_Upload {1}
# HELP UDP_Sent Total UDP packets sent.
# TYPE UDP_Sent gauge
UDP_Sent {2}
# HELP RCU_Online Current number of online RCU units.
# TYPE RCU_Online gauge
RCU_Online {3}
# HELP RCU_TakeCard Total number of card take operations performed by RCU units.
# TYPE RCU_TakeCard gauge
RCU_TakeCard {4}
# HELP RCU_Heart Total number of heartbeats received from RCU units.
# TYPE RCU_Heart gauge
RCU_Heart {5}
# HELP RCU_SearchHost Total number of host search operations performed by RCU units.
# TYPE RCU_SearchHost gauge
RCU_SearchHost {6}
# HELP Intercept Number of intercept operations or intercepted items.
# TYPE Intercept gauge
Intercept {7}
# HELP WebUser Number of active web users currently connected.
# TYPE WebUser gauge
WebUser {8}
# HELP Energy Current energy consumption or energy level.
# TYPE Energy gauge
Energy {9}
# HELP RCU_0E Number of RCU units with type 0E status.
# TYPE RCU_0E gauge
RCU_OE {10}
# HELP TCL_Ctr Control counter or status for TCL devices.
# TYPE TCL_Ctr gauge
TCL_Ctr {11}
# HELP TM_Ctr Control counter or status for TM devices.
# TYPE TM_Ctr gauge
TM_Ctr {12}
# HELP XD_Ctr Control counter or status for XD devices.
# TYPE XD_Ctr gauge
XD_Ctr {13}
# HELP Hivi_Ctr Control counter or status for Hivi devices.
# TYPE Hivi_Ctr gauge
Hivi_Ctr {14}
# HELP UDP_Cnt_Wireshark Total UDP packets captured and analyzed by Wireshark.
# TYPE UDP_Cnt_Wireshark gauge
UDP_Cnt_Wireshark {15}

44
看板定阅/Program.cs Normal file
View File

@@ -0,0 +1,44 @@
using Microsoft.EntityFrameworkCore;
using MySQLAccess.PGModels;
using Npgsql.PostgresTypes;
using .Services;
namespace
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMemoryCache();
//AddDbContext默认已经将DbContext注册为Scoped生命周期再次显式注册会导致冲突
builder.Services.AddDbContext<PostgresContext>(options =>
{
options.UseNpgsql(builder.Configuration.GetConnectionString("PGSqlStr"));
});
builder.Services.AddHostedService<MyTimer>();
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
}
}
}

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
<Project>
<PropertyGroup>
<DeleteExistingFiles>false</DeleteExistingFiles>
<ExcludeApp_Data>false</ExcludeApp_Data>
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>bin\Release\net8.0\publish\</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<_TargetId>Folder</_TargetId>
<SiteUrlToLaunchAfterPublish />
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<ProjectGuid>8bc36082-20d3-4c7d-b3a7-b0cb02ae14c8</ProjectGuid>
<SelfContained>false</SelfContained>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
<Project>
<PropertyGroup>
<_PublishTargetUrl>E:\tian\chongxin\EMQX\BooliveMQTT_Auth\看板定阅\bin\Release\net8.0\publish\</_PublishTargetUrl>
<History>True|2025-11-19T07:39:32.9873499Z||;True|2025-11-19T09:00:19.6017053+08:00||;True|2025-11-19T08:53:32.1723852+08:00||;True|2025-11-18T19:01:53.8731137+08:00||;True|2025-11-18T18:55:52.8128348+08:00||;True|2025-11-18T18:55:16.5375531+08:00||;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,29 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:35889",
"sslPort": 0
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5252",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@@ -0,0 +1,107 @@

using System.Text;
using Common;
using Microsoft.Extensions.Logging;
using MySQLAccess.PGModels;
using NLog;
using .Models;
namespace .Services
{
public class MyTimer : BackgroundService
{
//public PostgresContext dbcontext { get; set; }
public IServiceProvider pivider { get; set; }
public System.Timers.Timer jiankong_timer { get; set; }
public MyTimer(IServiceProvider db)
{
this.pivider = db;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
try
{
jiankong_timer = new System.Timers.Timer();
jiankong_timer.Interval = 15000;
jiankong_timer.Elapsed += Jiankong_timer_Elapsed; ;
jiankong_timer.Start();
await Task.CompletedTask;
}
catch (Exception)
{
}
}
public static Logger logger = LogManager.GetCurrentClassLogger();
private void Jiankong_timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{
try
{
//var db= pivider.GetRequiredKeyedService<PostgresContext>("");
//using var db = pivider.GetService<PostgresContext>();
//PostgresContext db = new PostgresContext();
using var scope = pivider.CreateScope();
var db = scope.ServiceProvider.GetRequiredService<PostgresContext>();
var data = db.TcpHeartbeatData.Where(A => A.DeviceId.Equals(WaiBuJianKong.data.device_id)).OrderByDescending(A => A.CreateTime).FirstOrDefault();
var df = WaiBuJianKong.data;
df.device_id = data.DeviceId;
df.device_status = data.WorkStatus;
df.realtime_value = data.RealTimeValue;
df.environment_value = data.EnvValue;
df.mcu_temperature = data.McuT;
df.sensor_temperature = data.Temperature;
df.sensor_humidity = data.Humidity;
df.adc_raw_value = data.AdcOriginalValuue;
string NewStringData = WaiBuJianKong.Data;
NewStringData = NewStringData.Replace("{1}", df.device_id)
.Replace("{2}", df.device_status)
.Replace("{3}", df.realtime_value)
.Replace("{4}", df.environment_value)
.Replace("{5}", df.mcu_temperature)
.Replace("{6}", df.sensor_temperature)
.Replace("{7}", df.sensor_humidity)
.Replace("{8}", df.adc_raw_value)
.Replace("{9}", "0")
.Replace("{10}", "0")
.Replace("{11}", "0")
.Replace("{12}", "0")
.Replace("{13}", "0")
.Replace("{14}", "0")
.Replace("{15}", "0");
WanBuJianKong(NewStringData, "1.txt");
File.WriteAllText("2.txt", NewStringData, Encoding.UTF8);
Console.WriteLine("here");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
logger.Error(ex.Message);
logger.Error(ex.StackTrace);
}
}
public static void WanBuJianKong(string Data, string SourceTxt)
{
System.IO.File.WriteAllText(SourceTxt, Data, Encoding.UTF8);
// 如果目标文件存在,先删除
if (System.IO.File.Exists(WaiBuJianKong.WaiBuJianKongTargetFileName))
{
System.IO.File.Delete(WaiBuJianKong.WaiBuJianKongTargetFileName);
}
// 重命名/移动文件
System.IO.File.Move(SourceTxt, WaiBuJianKong.WaiBuJianKongTargetFileName);
}
}
}

View File

@@ -0,0 +1,12 @@
@{
ViewData["Title"] = "Home Page";
}
<div>
<span></span>
<form method="post" action="Home/Monitor">
<input type="text" name="deviceid" />
<input type="submit" value="监控" />
</form>
</div>

View File

@@ -0,0 +1 @@
<h1>OK</h1>

View File

@@ -0,0 +1,6 @@
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>
<p>Use this page to detail your site's privacy policy.</p>

View File

@@ -0,0 +1,25 @@
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
}
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>

View File

@@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - 看板定阅</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/看板定阅.styles.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container-fluid">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">看板定阅</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
&copy; 2025 - 看板定阅 - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>

View File

@@ -0,0 +1,48 @@
/* Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
for details on configuring this project to bundle and minify static web assets. */
a.navbar-brand {
white-space: normal;
text-align: center;
word-break: break-all;
}
a {
color: #0077cc;
}
.btn-primary {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
.border-top {
border-top: 1px solid #e5e5e5;
}
.border-bottom {
border-bottom: 1px solid #e5e5e5;
}
.box-shadow {
box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
}
button.accept-policy {
font-size: 1rem;
line-height: inherit;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
white-space: nowrap;
line-height: 60px;
}

View File

@@ -0,0 +1,2 @@
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

View File

@@ -0,0 +1,3 @@
@using 看板定阅
@using 看板定阅.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

View File

@@ -0,0 +1,3 @@
@{
Layout = "_Layout";
}

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -0,0 +1,13 @@
{
"ConnectionStrings": {
//"PGSqlStr": "Server=localhost;Database=postgres;user id=postgres;password=123456;port=5432;"
"PGSqlStr": "Server=122.152.232.170;Database=postgres;user id=postgres;password=t3414T\"7wCU.&15]*QFu%_4CDhJI7g2b;port=65433;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,60 @@
# HELP UDP_Upload Total bytes uploaded via UDP.
# TYPE UDP_Upload gauge
UDP_Upload {1}
# HELP UDP_Sent Total UDP packets sent.
# TYPE UDP_Sent gauge
UDP_Sent {2}
# HELP RCU_Online Current number of online RCU units.
# TYPE RCU_Online gauge
RCU_Online {3}
# HELP RCU_TakeCard Total number of card take operations performed by RCU units.
# TYPE RCU_TakeCard gauge
RCU_TakeCard {4}
# HELP RCU_Heart Total number of heartbeats received from RCU units.
# TYPE RCU_Heart gauge
RCU_Heart {5}
# HELP RCU_SearchHost Total number of host search operations performed by RCU units.
# TYPE RCU_SearchHost gauge
RCU_SearchHost {6}
# HELP Intercept Number of intercept operations or intercepted items.
# TYPE Intercept gauge
Intercept {7}
# HELP WebUser Number of active web users currently connected.
# TYPE WebUser gauge
WebUser {8}
# HELP Energy Current energy consumption or energy level.
# TYPE Energy gauge
Energy {9}
# HELP RCU_0E Number of RCU units with type 0E status.
# TYPE RCU_0E gauge
RCU_OE {10}
# HELP TCL_Ctr Control counter or status for TCL devices.
# TYPE TCL_Ctr gauge
TCL_Ctr {11}
# HELP TM_Ctr Control counter or status for TM devices.
# TYPE TM_Ctr gauge
TM_Ctr {12}
# HELP XD_Ctr Control counter or status for XD devices.
# TYPE XD_Ctr gauge
XD_Ctr {13}
# HELP Hivi_Ctr Control counter or status for Hivi devices.
# TYPE Hivi_Ctr gauge
Hivi_Ctr {14}
# HELP UDP_Cnt_Wireshark Total UDP packets captured and analyzed by Wireshark.
# TYPE UDP_Cnt_Wireshark gauge
UDP_Cnt_Wireshark {15}

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -0,0 +1,13 @@
{
"ConnectionStrings": {
//"PGSqlStr": "Server=localhost;Database=postgres;user id=postgres;password=123456;port=5432;"
"PGSqlStr": "Server=122.152.232.170;Database=postgres;user id=postgres;password=t3414T\"7wCU.&15]*QFu%_4CDhJI7g2b;port=65433;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- enable asp.net core layout renderers -->
<targets>
<!--项目日志保存文件路径说明fileName="${basedir}/保存目录,以年月日的格式创建/${shortdate}/${记录器名称}-${单级记录}-${shortdate}.txt"-->
<target name="info_file" xsi:type="File"
fileName="${basedir}/Logs/${shortdate}/info_${shortdate}.txt"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception:format=ToString} ${newline} ${stacktrace} ${newline}"
archiveFileName="${basedir}/archives/info_${shortdate}-{#####}.txt"
archiveAboveSize="102400"
archiveNumbering="Sequence"
concurrentWrites="true"
keepFileOpen="false" />
<target name="error_file" xsi:type="File"
fileName="${basedir}/Logs/${shortdate}/error_${shortdate}.txt"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception:format=ToString} ${newline} ${stacktrace} ${newline}"
archiveFileName="${basedir}/archives/error_${shortdate}-{#####}.txt"
archiveAboveSize="102400"
archiveNumbering="Sequence"
concurrentWrites="true"
keepFileOpen="false" />
</targets>
<!--规则配置,final - 最终规则匹配后不处理任何规则-->
<!--规则配置,final - 最终规则匹配后不处理任何规则-->
<!--定义使用哪个target输出-->
<rules>
<!-- 优先级从高到低依次为OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL -->
<!-- 将所有日志输出到文件 -->
<logger name="*" minlevel="FATAL" maxlevel="FATAL" writeTo="info_file" />
<logger name="*" minlevel="ERROR" maxlevel="ERROR" writeTo="error_file" />
</rules>
</nlog>

View File

@@ -0,0 +1,182 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"看板定阅/1.0.0": {
"dependencies": {
"MySQLAccess": "1.0.0",
"NLog": "6.0.6"
},
"runtime": {
"看板定阅.dll": {}
}
},
"Microsoft.EntityFrameworkCore/8.0.16": {
"dependencies": {
"Microsoft.EntityFrameworkCore.Abstractions": "8.0.16"
},
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.dll": {
"assemblyVersion": "8.0.16.0",
"fileVersion": "8.0.1625.21606"
}
}
},
"Microsoft.EntityFrameworkCore.Abstractions/8.0.16": {
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
"assemblyVersion": "8.0.16.0",
"fileVersion": "8.0.1625.21606"
}
}
},
"Microsoft.EntityFrameworkCore.Relational/8.0.16": {
"dependencies": {
"Microsoft.EntityFrameworkCore": "8.0.16"
},
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": {
"assemblyVersion": "8.0.16.0",
"fileVersion": "8.0.1625.21606"
}
}
},
"MySqlConnector/2.3.5": {
"runtime": {
"lib/net8.0/MySqlConnector.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.3.5.0"
}
}
},
"NLog/6.0.6": {
"runtime": {
"lib/netstandard2.1/NLog.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.6.4706"
}
}
},
"Npgsql/8.0.6": {
"runtime": {
"lib/net8.0/Npgsql.dll": {
"assemblyVersion": "8.0.6.0",
"fileVersion": "8.0.6.0"
}
}
},
"Npgsql.EntityFrameworkCore.PostgreSQL/8.0.11": {
"dependencies": {
"Microsoft.EntityFrameworkCore": "8.0.16",
"Microsoft.EntityFrameworkCore.Abstractions": "8.0.16",
"Microsoft.EntityFrameworkCore.Relational": "8.0.16",
"Npgsql": "8.0.6"
},
"runtime": {
"lib/net8.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": {
"assemblyVersion": "8.0.11.0",
"fileVersion": "8.0.11.0"
}
}
},
"Pomelo.EntityFrameworkCore.MySql/8.0.3": {
"dependencies": {
"Microsoft.EntityFrameworkCore.Relational": "8.0.16",
"MySqlConnector": "2.3.5"
},
"runtime": {
"lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": {
"assemblyVersion": "8.0.3.0",
"fileVersion": "8.0.3.0"
}
}
},
"MySQLAccess/1.0.0": {
"dependencies": {
"Microsoft.EntityFrameworkCore": "8.0.16",
"Microsoft.EntityFrameworkCore.Relational": "8.0.16",
"Npgsql.EntityFrameworkCore.PostgreSQL": "8.0.11",
"Pomelo.EntityFrameworkCore.MySql": "8.0.3"
},
"runtime": {
"MySQLAccess.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
}
}
},
"libraries": {
"看板定阅/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Microsoft.EntityFrameworkCore/8.0.16": {
"type": "package",
"serviceable": true,
"sha512": "sha512-of6QttndQXVC6VOoWMDGGCkoo3I904R05g1GX55Qnw6EFXo6WuWe77/mNGbG1rlBbm7K0k68ila0AaUHHaVkiQ==",
"path": "microsoft.entityframeworkcore/8.0.16",
"hashPath": "microsoft.entityframeworkcore.8.0.16.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Abstractions/8.0.16": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pjkQ8mhtmzekC56TlWvMbHAme5viF81COeVlGMfpCe5KpC5sRCa1s6qcITwEpcKKVW9JT4EqKH3xHWpoHJUn2A==",
"path": "microsoft.entityframeworkcore.abstractions/8.0.16",
"hashPath": "microsoft.entityframeworkcore.abstractions.8.0.16.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Relational/8.0.16": {
"type": "package",
"serviceable": true,
"sha512": "sha512-mZxHVSzGYmQWhvk98JEREmYke+NkBVsCL0q+yN23V3939qxXguSXBvnWc+zO9OfWGpYqzS80ES4I/H+xY33hoA==",
"path": "microsoft.entityframeworkcore.relational/8.0.16",
"hashPath": "microsoft.entityframeworkcore.relational.8.0.16.nupkg.sha512"
},
"MySqlConnector/2.3.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==",
"path": "mysqlconnector/2.3.5",
"hashPath": "mysqlconnector.2.3.5.nupkg.sha512"
},
"NLog/6.0.6": {
"type": "package",
"serviceable": true,
"sha512": "sha512-eUd/LDIwPtufj5OxtzFYiwuoKpzaS87iqO9P9D05avLCk4jIoOlqMwRH0o/43LmzM+CmgVAdDrCOq/rOK0sDKw==",
"path": "nlog/6.0.6",
"hashPath": "nlog.6.0.6.nupkg.sha512"
},
"Npgsql/8.0.6": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KaS6CY5kY2Sd0P00MSeFcOI3t2DiQ4UWG8AuRpVOUeDWITOKfoEEG91DP3cmT6aerixPkjwKgXxnpDxIkDpO6g==",
"path": "npgsql/8.0.6",
"hashPath": "npgsql.8.0.6.nupkg.sha512"
},
"Npgsql.EntityFrameworkCore.PostgreSQL/8.0.11": {
"type": "package",
"serviceable": true,
"sha512": "sha512-leShR/O/nSIS3Jpj8yUBmkzaXzBbtlV326+MYkX2BwAj2qSNrUv/H6m8G9Hnv2zUkQYccTpmV5jIVq5vdciEUA==",
"path": "npgsql.entityframeworkcore.postgresql/8.0.11",
"hashPath": "npgsql.entityframeworkcore.postgresql.8.0.11.nupkg.sha512"
},
"Pomelo.EntityFrameworkCore.MySql/8.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-gOHP6v/nFp5V/FgHqv9mZocGqCLGofihEX9dTbLhiXX3H7SJHmGX70GIPUpiqLT+1jIfDxg1PZh9MTUKuk7Kig==",
"path": "pomelo.entityframeworkcore.mysql/8.0.3",
"hashPath": "pomelo.entityframeworkcore.mysql.8.0.3.nupkg.sha512"
},
"MySQLAccess/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,20 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
{
"name": "Microsoft.AspNetCore.App",
"version": "8.0.0"
}
],
"configProperties": {
"System.GC.Server": true,
"System.Reflection.NullabilityInfoContext.IsSupported": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,60 @@
# HELP UDP_Upload Total bytes uploaded via UDP.
# TYPE UDP_Upload gauge
UDP_Upload {1}
# HELP UDP_Sent Total UDP packets sent.
# TYPE UDP_Sent gauge
UDP_Sent {2}
# HELP RCU_Online Current number of online RCU units.
# TYPE RCU_Online gauge
RCU_Online {3}
# HELP RCU_TakeCard Total number of card take operations performed by RCU units.
# TYPE RCU_TakeCard gauge
RCU_TakeCard {4}
# HELP RCU_Heart Total number of heartbeats received from RCU units.
# TYPE RCU_Heart gauge
RCU_Heart {5}
# HELP RCU_SearchHost Total number of host search operations performed by RCU units.
# TYPE RCU_SearchHost gauge
RCU_SearchHost {6}
# HELP Intercept Number of intercept operations or intercepted items.
# TYPE Intercept gauge
Intercept {7}
# HELP WebUser Number of active web users currently connected.
# TYPE WebUser gauge
WebUser {8}
# HELP Energy Current energy consumption or energy level.
# TYPE Energy gauge
Energy {9}
# HELP RCU_0E Number of RCU units with type 0E status.
# TYPE RCU_0E gauge
RCU_OE {10}
# HELP TCL_Ctr Control counter or status for TCL devices.
# TYPE TCL_Ctr gauge
TCL_Ctr {11}
# HELP TM_Ctr Control counter or status for TM devices.
# TYPE TM_Ctr gauge
TM_Ctr {12}
# HELP XD_Ctr Control counter or status for XD devices.
# TYPE XD_Ctr gauge
XD_Ctr {13}
# HELP Hivi_Ctr Control counter or status for Hivi devices.
# TYPE Hivi_Ctr gauge
Hivi_Ctr {14}
# HELP UDP_Cnt_Wireshark Total UDP packets captured and analyzed by Wireshark.
# TYPE UDP_Cnt_Wireshark gauge
UDP_Cnt_Wireshark {15}

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -0,0 +1,13 @@
{
"ConnectionStrings": {
//"PGSqlStr": "Server=localhost;Database=postgres;user id=postgres;password=123456;port=5432;"
"PGSqlStr": "Server=122.152.232.170;Database=postgres;user id=postgres;password=t3414T\"7wCU.&15]*QFu%_4CDhJI7g2b;port=65433;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- enable asp.net core layout renderers -->
<targets>
<!--项目日志保存文件路径说明fileName="${basedir}/保存目录,以年月日的格式创建/${shortdate}/${记录器名称}-${单级记录}-${shortdate}.txt"-->
<target name="info_file" xsi:type="File"
fileName="${basedir}/Logs/${shortdate}/info_${shortdate}.txt"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception:format=ToString} ${newline} ${stacktrace} ${newline}"
archiveFileName="${basedir}/archives/info_${shortdate}-{#####}.txt"
archiveAboveSize="102400"
archiveNumbering="Sequence"
concurrentWrites="true"
keepFileOpen="false" />
<target name="error_file" xsi:type="File"
fileName="${basedir}/Logs/${shortdate}/error_${shortdate}.txt"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception:format=ToString} ${newline} ${stacktrace} ${newline}"
archiveFileName="${basedir}/archives/error_${shortdate}-{#####}.txt"
archiveAboveSize="102400"
archiveNumbering="Sequence"
concurrentWrites="true"
keepFileOpen="false" />
</targets>
<!--规则配置,final - 最终规则匹配后不处理任何规则-->
<!--规则配置,final - 最终规则匹配后不处理任何规则-->
<!--定义使用哪个target输出-->
<rules>
<!-- 优先级从高到低依次为OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL -->
<!-- 将所有日志输出到文件 -->
<logger name="*" minlevel="FATAL" maxlevel="FATAL" writeTo="info_file" />
<logger name="*" minlevel="ERROR" maxlevel="ERROR" writeTo="error_file" />
</rules>
</nlog>

View File

@@ -0,0 +1,60 @@
# HELP UDP_Upload Total bytes uploaded via UDP.
# TYPE UDP_Upload gauge
UDP_Upload 80
# HELP UDP_Sent Total UDP packets sent.
# TYPE UDP_Sent gauge
UDP_Sent 2
# HELP RCU_Online Current number of online RCU units.
# TYPE RCU_Online gauge
RCU_Online 792
# HELP RCU_TakeCard Total number of card take operations performed by RCU units.
# TYPE RCU_TakeCard gauge
RCU_TakeCard 792
# HELP RCU_Heart Total number of heartbeats received from RCU units.
# TYPE RCU_Heart gauge
RCU_Heart 75
# HELP RCU_SearchHost Total number of host search operations performed by RCU units.
# TYPE RCU_SearchHost gauge
RCU_SearchHost 0
# HELP Intercept Number of intercept operations or intercepted items.
# TYPE Intercept gauge
Intercept 211
# HELP WebUser Number of active web users currently connected.
# TYPE WebUser gauge
WebUser 688
# HELP Energy Current energy consumption or energy level.
# TYPE Energy gauge
Energy 0
# HELP RCU_0E Number of RCU units with type 0E status.
# TYPE RCU_0E gauge
RCU_OE 0
# HELP TCL_Ctr Control counter or status for TCL devices.
# TYPE TCL_Ctr gauge
TCL_Ctr 0
# HELP TM_Ctr Control counter or status for TM devices.
# TYPE TM_Ctr gauge
TM_Ctr 0
# HELP XD_Ctr Control counter or status for XD devices.
# TYPE XD_Ctr gauge
XD_Ctr 0
# HELP Hivi_Ctr Control counter or status for Hivi devices.
# TYPE Hivi_Ctr gauge
Hivi_Ctr 0
# HELP UDP_Cnt_Wireshark Total UDP packets captured and analyzed by Wireshark.
# TYPE UDP_Cnt_Wireshark gauge
UDP_Cnt_Wireshark 0

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,60 @@
# HELP UDP_Upload Total bytes uploaded via UDP.
# TYPE UDP_Upload gauge
UDP_Upload {1}
# HELP UDP_Sent Total UDP packets sent.
# TYPE UDP_Sent gauge
UDP_Sent {2}
# HELP RCU_Online Current number of online RCU units.
# TYPE RCU_Online gauge
RCU_Online {3}
# HELP RCU_TakeCard Total number of card take operations performed by RCU units.
# TYPE RCU_TakeCard gauge
RCU_TakeCard {4}
# HELP RCU_Heart Total number of heartbeats received from RCU units.
# TYPE RCU_Heart gauge
RCU_Heart {5}
# HELP RCU_SearchHost Total number of host search operations performed by RCU units.
# TYPE RCU_SearchHost gauge
RCU_SearchHost {6}
# HELP Intercept Number of intercept operations or intercepted items.
# TYPE Intercept gauge
Intercept {7}
# HELP WebUser Number of active web users currently connected.
# TYPE WebUser gauge
WebUser {8}
# HELP Energy Current energy consumption or energy level.
# TYPE Energy gauge
Energy {9}
# HELP RCU_0E Number of RCU units with type 0E status.
# TYPE RCU_0E gauge
RCU_OE {10}
# HELP TCL_Ctr Control counter or status for TCL devices.
# TYPE TCL_Ctr gauge
TCL_Ctr {11}
# HELP TM_Ctr Control counter or status for TM devices.
# TYPE TM_Ctr gauge
TM_Ctr {12}
# HELP XD_Ctr Control counter or status for XD devices.
# TYPE XD_Ctr gauge
XD_Ctr {13}
# HELP Hivi_Ctr Control counter or status for Hivi devices.
# TYPE Hivi_Ctr gauge
Hivi_Ctr {14}
# HELP UDP_Cnt_Wireshark Total UDP packets captured and analyzed by Wireshark.
# TYPE UDP_Cnt_Wireshark gauge
UDP_Cnt_Wireshark {15}

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -0,0 +1,13 @@
{
"ConnectionStrings": {
//"PGSqlStr": "Server=localhost;Database=postgres;user id=postgres;password=123456;port=5432;"
"PGSqlStr": "Server=122.152.232.170;Database=postgres;user id=postgres;password=t3414T\"7wCU.&15]*QFu%_4CDhJI7g2b;port=65433;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- enable asp.net core layout renderers -->
<targets>
<!--项目日志保存文件路径说明fileName="${basedir}/保存目录,以年月日的格式创建/${shortdate}/${记录器名称}-${单级记录}-${shortdate}.txt"-->
<target name="info_file" xsi:type="File"
fileName="${basedir}/Logs/${shortdate}/info_${shortdate}.txt"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception:format=ToString} ${newline} ${stacktrace} ${newline}"
archiveFileName="${basedir}/archives/info_${shortdate}-{#####}.txt"
archiveAboveSize="102400"
archiveNumbering="Sequence"
concurrentWrites="true"
keepFileOpen="false" />
<target name="error_file" xsi:type="File"
fileName="${basedir}/Logs/${shortdate}/error_${shortdate}.txt"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception:format=ToString} ${newline} ${stacktrace} ${newline}"
archiveFileName="${basedir}/archives/error_${shortdate}-{#####}.txt"
archiveAboveSize="102400"
archiveNumbering="Sequence"
concurrentWrites="true"
keepFileOpen="false" />
</targets>
<!--规则配置,final - 最终规则匹配后不处理任何规则-->
<!--规则配置,final - 最终规则匹配后不处理任何规则-->
<!--定义使用哪个target输出-->
<rules>
<!-- 优先级从高到低依次为OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL -->
<!-- 将所有日志输出到文件 -->
<logger name="*" minlevel="FATAL" maxlevel="FATAL" writeTo="info_file" />
<logger name="*" minlevel="ERROR" maxlevel="ERROR" writeTo="error_file" />
</rules>
</nlog>

View File

@@ -0,0 +1,17 @@
{
"apps": [
{
"name": "看板订阅",
"script": "看板定阅.exe",
"args": ["--urls", "http://0.0.0.0:19031"]
}
]
}

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\看板定阅.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
<!--ProjectGuid: 8bc36082-20d3-4c7d-b3a7-b0cb02ae14c8-->

View File

@@ -0,0 +1,22 @@
html {
font-size: 14px;
}
@media (min-width: 768px) {
html {
font-size: 16px;
}
}
.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb;
}
html {
position: relative;
min-height: 100%;
}
body {
margin-bottom: 60px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -0,0 +1,4 @@
// Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
// for details on configuring this project to bundle and minify static web assets.
// Write your JavaScript code.

View File

@@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2011-2021 Twitter, Inc.
Copyright (c) 2011-2021 The Bootstrap Authors
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.

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,427 @@
/*!
* Bootstrap Reboot v5.1.0 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
background-color: currentColor;
border: 0;
opacity: 0.25;
}
hr:not([size]) {
height: 1px;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-bs-original-title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-left: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.2em;
background-color: #fcf8e3;
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: #0d6efd;
text-decoration: underline;
}
a:hover {
color: #0a58ca;
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
font-size: 1em;
direction: ltr /* rtl:ignore */;
unicode-bidi: bidi-override;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: #d63384;
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.2rem 0.4rem;
font-size: 0.875em;
color: #fff;
background-color: #212529;
border-radius: 0.2rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
font-weight: 700;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: #6c757d;
text-align: left;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]::-webkit-calendar-picker-indicator {
display: none;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: left;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: left;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
outline-offset: -2px;
-webkit-appearance: textfield;
}
/* rtl:raw:
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::file-selector-button {
font: inherit;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,8 @@
/*!
* Bootstrap Reboot v5.1.0 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.min.css.map */

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,424 @@
/*!
* Bootstrap Reboot v5.1.0 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
background-color: currentColor;
border: 0;
opacity: 0.25;
}
hr:not([size]) {
height: 1px;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-bs-original-title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-right: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-right: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.2em;
background-color: #fcf8e3;
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: #0d6efd;
text-decoration: underline;
}
a:hover {
color: #0a58ca;
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
font-size: 1em;
direction: ltr ;
unicode-bidi: bidi-override;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: #d63384;
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.2rem 0.4rem;
font-size: 0.875em;
color: #fff;
background-color: #212529;
border-radius: 0.2rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
font-weight: 700;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: #6c757d;
text-align: right;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]::-webkit-calendar-picker-indicator {
display: none;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: right;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: right;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
outline-offset: -2px;
-webkit-appearance: textfield;
}
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::file-selector-button {
font: inherit;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,8 @@
/*!
* Bootstrap Reboot v5.1.0 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.rtl.min.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More