Example #1
0
        public void LoadUpstreams()
        {
            lock (this.configFilePathLock) {
                var upstreams = new List <NginxUpstream>();

                string line;
                using var file = new StreamReader(this.configFilePath);

                NginxUpstream upstream = null;
                List <NginxUpstreamServer> upstreamServers = null;
                while ((line = file.ReadLine()) != null)
                {
                    if (upstream != null)
                    {
                        if (IsEnd(line))
                        {
                            upstream.Servers = upstreamServers;
                            upstreams.Add(upstream);

                            upstream        = null;
                            upstreamServers = null;
                        }
                        else if (IsServer(line))
                        {
                            var enabled = IsEnabled(line);
                            var server  = new NginxUpstreamServer {
                                Enabled = enabled,
                                Entry   = GetServerEntry(line)
                            };
                            if (upstreamServers == null)
                            {
                                upstreamServers = new List <NginxUpstreamServer> {
                                    server
                                };
                            }
                            else
                            {
                                upstreamServers.Add(server);
                            }
                        }
                    }

                    if (IsUpstream(line))
                    {
                        upstream = new NginxUpstream {
                            Name = GetUpstreamName(line)
                        };
                    }
                }

                this.upstreams = upstreams;
            }
        }
Example #2
0
        //(upstream[\s]+[\w\d]+ {[\s]+[\w\s\d.:=]+;[\s]+})
        public static List <NginxUpstream> ParseUpstream(string text)
        {
            var list    = new List <NginxUpstream>();
            var regex   = new Regex("(upstream[\\s]+[\\w\\d]+ {[\\s]+[\\w\\s\\d.:=]+;[\\s]+})");
            var matches = regex.Matches(text);

            foreach (var match in matches)
            {
                var name   = CaptureGroup(match.ToString(), "upstream[\\s]+([\\w\\d]+) {");
                var server = CaptureGroup(match.ToString(), "upstream[\\s]+[\\w\\d]+[\\s]+{[\\s]+server[\\s]+([\\d.:]+)");
                var acl    = new NginxUpstream {
                    Name   = name,
                    Server = server
                };
                list.Add(acl);
            }
            return(list);
        }