コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }