class

Detector::Specification::Haproxy

Inherits Detector < Reference < Object

Constants

CONFIG_FILE = /(?:\.cfg|\Ahaproxy[\w.-]*\.(?:cfg|conf)(?:\.(?:j2|tmpl|template|erb))?)\z/

haproxy.cfg, conf/lb.cfg, haproxy.conf, haproxy.cfg.j2; not docs/haproxy.md, whose examples are not a running config.

PATH_ACL = /(?:^[ \t]*acl[ \t]+\S+|\{)[ \t]+(?:path|url)(?:_beg|_end|_reg|_dir|_sub)?\b/m

A path fetch in an ACL definition or an anonymous { ... } ACL.

SECTION = /^[ \t]*(?:frontend|backend|listen)[ \t]+[A-Za-z_]/m

frontend web / listen stats / backend api. nginx's listen 80; takes a port, not a name.

Instance methods

applicable?(filename : String) : Bool

Cheap filename-only filter the detector pass uses to skip detect on files the detector cannot possibly match. The default true preserves prior behavior (every detector runs on every file). Override with the same predicate the body of detect starts with — e.g., filename.ends_with?(".py") for a Python framework detector — so the detector loop avoids the detect dispatch on files outside the detector's language.

On large codebases (saleor's 4255 .py files) this lifts ~100 virtual detect calls per file out of the hot loop because most detectors' inner first-line is exactly this kind of cheap filename check.

Source
detect(filename : String, file_contents : String) : Bool
Source
idempotent?

Registers HAProxy configs (*.cfg, haproxy*) that match on the request path in CodeLocator.

Source
name

Registers HAProxy configs (*.cfg, haproxy*) that match on the request path in CodeLocator.

Source