示例#1
0
 public StatusPage()
 {
     InitializeComponent();
     _vm = DataContext as StatusPageViewModel;
     NavigationCacheMode = NavigationCacheMode.Enabled;
     _vm.AvatarChanged   = OnAvatarChanged;
 }
        public async Task <IActionResult> Status(string slug)
        {
            try
            {
                var campaign = await _apiService.Client.ApiLeadGenerationGetCampaignGetAsync(null, slug);

                var leadId = HttpContext.Session.GetInt32(campaign.Id + "-LeadId");
                var lead   = await _apiService.Client.ApiLeadGenerationGetLeadGetAsync(leadId);

                var model = new StatusPageViewModel()
                {
                    Campaign = campaign, CampaignLead = lead
                };

                return(View(model));
            }
            catch (SwaggerException <ErrorResponse> ex)
            {
                AlertDanger(ex.Result.Message);
                return(RedirectToAction("Index", new { slug = slug }));
            }
            catch (Exception ex)
            {
                AlertDanger(ex.Message);
                return(RedirectToAction("Index", new { slug = slug }));
            }
        }
示例#3
0
        public StatusPage(World selectedWorld)
        {
            InitializeComponent();
            BindingContext = new StatusPageViewModel(selectedWorld);

            Children.Add(new SpawnablePage(selectedWorld));
            Children.Add(new RecentPage(selectedWorld));
            Children.Add(new UpcomingPage(selectedWorld));
        }
示例#4
0
        public async Task <IActionResult> Index()
        {
            if (!_db.Settings.Any(x => x.Id == "Setup"))
            {
                return(View("Setup"));
            }
            var monthAgo       = DateTime.UtcNow.AddDays(-30);
            var twoMonthsAgo   = DateTime.UtcNow.AddDays(-60);
            var dayAgo         = DateTime.UtcNow.AddDays(-1);
            var statusMessages = await _db.Incidents.Include(x => x.Messages).Include(x => x.Site).Where(x => x.Start > monthAgo).OrderByDescending(x => x.Start).ToListAsync();

            var pings = (await _db.Pings.Where(x => x.PingSetting.Visible && x.DateTime > dayAgo).ToListAsync()).GroupBy(x => x.PingSetting);
            var today = DateTime.Today;
            var dates = Enumerable.Range(1, 60).Select(x => today.AddDays(-x)).ToArray();
            // TODO: Rewrite to include all incidents every day
            var sql             = $@"
SELECT CAST([Start] AS DATE) Date, DATEDIFF(SECOND, MIN([End]), MIN([Start])) Duration, COUNT(*) [Count] FROM Incidents
WHERE CAST([Start] AS DATE) > N'{twoMonthsAgo:O}'
GROUP BY CAST([Start] AS DATE)";
            var incidentsPerDay = _db.Database.SqlQuery <IncidentDailySummary>(sql).ToList();
            var pingSummaries   = _db.Database.SqlQuery <PingSummary>($@"SELECT SUM(IIF(ResponseTime > 300, 1, 0)) [HighPingCount], COUNT(*) [Count], CAST([DateTime] AS DATE) [Date] FROM Pings WHERE CAST([DateTime] AS DATE) > N'{twoMonthsAgo:O}' GROUP BY CAST([DateTime] AS DATE);").ToList();
            var summaries       = dates.Select(x => new DailyStatusSummary()
            {
                Date = x,
                DownTimePercentage = incidentsPerDay.FirstOrDefault(y => y.Date == x)?.Duration ?? 0 / 86400,
                HighPingPercentage = (pingSummaries.FirstOrDefault(y => y.Date == x)?.HighPingCount / pingSummaries.FirstOrDefault(y => y.Date == x)?.Count) ?? 0
            }).OrderBy(x => x.Date).ToList();
            var viewModel = new StatusPageViewModel()
            {
                Incidents            = statusMessages,
                Pings                = pings,
                DailyStatusSummaries = summaries
            };

            return(View(viewModel));
        }
示例#5
0
 public StatusPage()
 {
     this.InitializeComponent();
     _vm = DataContext as StatusPageViewModel;
     NavigationCacheMode = NavigationCacheMode.Enabled;
 }
示例#6
0
 public StatusPage()
 {
     InitializeComponent();
     this.BindingContext = _vm = new StatusPageViewModel();
 }