public void SaveNodes(VmxHaPair record) { // serialize and convert to byte array string json = JsonConvert.SerializeObject(record); byte[] bytes = Encoding.ASCII.GetBytes(json); Stream source = new MemoryStream(bytes); var containerClient = _blobServiceClient.GetBlobContainerClient(_containername); var blobClient = containerClient.GetBlobClient(_blobname); blobClient.Upload(source, true); }
public VmxHaPair GetNodes() { // download blob var containerClient = _blobServiceClient.GetBlobContainerClient(_containername); var blobClient = containerClient.GetBlobClient(_blobname); Stream target = new MemoryStream(); blobClient.DownloadTo(target); target.Position = 0; StreamReader reader = new StreamReader(target); string text = reader.ReadToEnd(); // deserialize into VmxHaPair VmxHaPair record = JsonConvert.DeserializeObject <VmxHaPair>(text); return(record); }
public MerakiProbeResult Failover(int maxLossPercent) { // Get HA Pair from blob storage var hapair = _blob.GetNodes(); // probe active node var probe = _probe.GetLossLatency(hapair.activeNode.networkId, hapair.activeNode.deviceSerial); var logentry = new MerakiProbeResult() { latencyMs = probe.latencyMs, lossPercent = probe.lossPercent, ActiveVmName = hapair.activeNode.vmName, Failover = false }; if (probe.lossPercent > maxLossPercent) { // failover updating all route tables foreach (RouteInfo route in _routes) { _router.UpdateRoute(route.ResourceGroup, route.RouteTableName, route.RouteName, hapair.standByNode.privateIp); } var newhapair = new VmxHaPair() { activeNode = hapair.standByNode, standByNode = hapair.activeNode }; _blob.SaveNodes(newhapair); logentry.Failover = true; logentry.Message = probe.ErrorMessage; } var json = JsonConvert.SerializeObject(logentry); _log.Log(LogName, json); return(logentry); }