12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.Options;
- using SiteStatus.Business;
- using SiteStatus.Dbo;
-
- namespace SiteStatus.Controllers
- {
-
- [Route("api/[controller]")]
- [ApiController]
- public class StatusController : SSController
- {
- protected HostBusiness HostBusiness { get; }
- public DnsBusiness DnsBusiness { get; }
-
- public SettingsDbo Options { get; }
-
- public StatusController(HostBusiness hostBusiness, DnsBusiness dnsBusiness, IOptions<SettingsDbo> options)
- {
- HostBusiness = hostBusiness;
- DnsBusiness = dnsBusiness;
- Options = options.Value;
- }
-
- [HttpGet("/api/[controller]/hosts")]
- public ApiResultDbo<List<SiteDbo>> GetHosts()
- {
- var sites = Options.VpnS2s.Sites.Select(site => new SiteDbo
- {
- Name = string.IsNullOrEmpty(site.Name) ? null : site.Name,
- Hosts = site.Hosts.Select(host => new HostDbo
- {
- HostStatus = null,
- Ip = host.Ip
- }).ToList()
- }).ToList();
-
- var hosts = sites.SelectMany(site => site.Hosts).ToList();
- var tasks = hosts.Select(host => HostBusiness.GetHostStatusAsync(host.Ip, Options.VpnS2s.Ping.Count, Options.VpnS2s.Ping.Timeout)).ToArray();
-
- Task.WaitAll(tasks);
-
- foreach (var task in tasks)
- {
- hosts.First(host => host.Ip == task.Result.Ip.ToString()).HostStatus = task.Result;
- }
-
- return Handle(sites);
- }
-
- [HttpGet("/api/[controller]/dns")]
- public ApiResultDbo<List<DnsZoneStatusDbo>> GetDns()
- {
- var servers = Options.Dns.Servers.Select(server => server.Ip).ToList();
- var tasks = Options.Dns.Zones.Select(zone => DnsBusiness.GetZoneStatusAsync(zone.Name, servers)).ToArray();
-
- Task.WaitAll(tasks);
-
- var results = tasks.Select(task => task.Result).ToList();
-
- return Handle(results);
- }
- }
- }
|