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; } }
//(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); }