using System; using System.Collections.Generic; using System.Text; using System.Linq; using System.IO; using System.Net.Http; using System.Net.Http.Headers; using Amazon.S3; using Amazon.S3.Transfer; namespace rockfishCore.Util { public static class OpsDiagnostics { private const int S3_EXPECTED_FILE_COUNT=24; public static readonly string[] S3_EXPECTED_BACKUP_FILE_PREFIXES = { "biz-docker-website-backup-", "biz-letsencryptbackup-", "biz-pecklist-db-backup-", "biz-rockfish-db-backup-", "devops-docker-le-config-backup-","forum-backup-", "mail-svn-repo-backup-" }; private const string S3_SECRET_KEY = "iNwbHr+sK+9is2wmRjIax+rdyEjLNvWKJBYr7w4txkY"; private const string S3_ACCESS_KEY = "CMPAFDNX53OWPC55HBJ4"; private const string S3_HOST_ENDPOINT = "https://nyc3.digitaloceanspaces.com"; private static HttpClient Client = new HttpClient(); public static bool CheckWebsite(string url, string mustContain) { bool Result = false; var Response = Client.GetAsync(url).Result; if (Response.IsSuccessStatusCode) { var PageText = Response.Content.ReadAsStringAsync().Result; if (PageText.Contains(mustContain)) { Result = true; } } return Result; } public static List GetFileListFromSpacesBackupStorage() { AmazonS3Config clientConfig = new AmazonS3Config(); clientConfig.ServiceURL = S3_HOST_ENDPOINT; IAmazonS3 s3Client = new AmazonS3Client(S3_ACCESS_KEY, S3_SECRET_KEY, clientConfig); var objectList = s3Client.ListObjectsAsync("gztw1").Result; var fileList = objectList.S3Objects.Select(c => c.Key).ToList(); return fileList; } public static bool VerifyBackups() { bool ret=false; var SpacesFileNames = GetFileListFromSpacesBackupStorage(); if (SpacesFileNames.Count != S3_EXPECTED_FILE_COUNT) return ret; //get yesterday's date in the same format as the backup creates var ExpectedBackupDateString=DateTime.Today.AddDays(-1).ToString("yyMMdd"); int foundMatches=0; foreach(string ExpectedFileName in S3_EXPECTED_BACKUP_FILE_PREFIXES){ foreach(string FileName in SpacesFileNames){ if(FileName.StartsWith(ExpectedFileName+ExpectedBackupDateString)){ foundMatches++; break; } } } if(foundMatches==S3_EXPECTED_BACKUP_FILE_PREFIXES.Length){ ret=true; } return ret; } }//eoc }//eons