Class ::nsmcp::LogDiscovery (public)

 ::nx::Class ::nsmcp::LogDiscovery[i]

Defined in /usr/local/ns/tcl/nsmcp/log-discovery.tcl

Testcases:
No testcase defined.
Source code:
    :property {systemLog {}}
    :property {accessLog {}}
    :property {cacheDirectory {}}

    :method runtimeSystemLog {} {
        return [ns_info log]
    }

    :method runtimeAccessLog {} {
        if {[info commands ns_accesslog] eq ""} {
            return {}
        }
        return [ns_accesslog file]
    }

    :method describePath {path origin} {
        if {$path eq ""} {
            return [dict create path {} origin $origin exists false readable false]
        }
        if {[file pathtype $path] ne "absolute"} {
            error "log discovery requires an absolute effective path"
        }
        set path [file normalize $path]
        return [dict create path $path origin $origin exists [file isfile $path]  readable [expr {[file isfile $path] && [file readable $path]}]]
    }

    :public method discover {} {
        #
        # Resolve the effective system-log and access-log sources.
        #
        # Combine configured overrides with runtime discovery and retain
        # availability and origin metadata.
        #
        # @return The discovered log-source dictionary.
        #

        set system ${:systemLog}
        set systemOrigin override
        if {$system eq ""} {
            set system [:runtimeSystemLog]
            set systemOrigin runtime
        }
        set access ${:accessLog}
        set accessOrigin override
        if {$access eq ""} {
            set access [:runtimeAccessLog]
            set accessOrigin runtime
        }
        set cache ${:cacheDirectory}
        if {$cache eq ""} {
            set serverKey [string range [ns_crypto::md string -digest sha256 -- [ns_info server]] 0 11]
            set cache [file join /tmp nsmcp-cache-[pid]-$serverKey]
        }
        if {[file pathtype $cache] ne "absolute"} {
            error "cacheDirectory must be absolute"
        }
        return [dict create server [ns_info server]  system [:describePath $system $systemOrigin]  access [:describePath $access $accessOrigin]  cacheDirectory [file normalize $cache]]
    }

    :public method createCorrelation {name} {
        #
        # Create a named correlation service for the discovered sources.
        #
        # Validate the object name and source availability, then create the searches
        # owned by the correlation object; clean up on failure.
        #
        # @param name Name of the configured or registered item to resolve.
        #
        # @return The newly created correlation object command.
        #

        if {![string match ::* $name]} {
            error "expected a fully qualified object name"
        }
        if {[nsf::object::exists $name]} {
            error "object already exists: $name"
        }
        set discovered [:discover]
        if {![dict get $discovered system readable]} {
            error "discovered system log is missing or unreadable"
        }
        set access [dict get $discovered access path]
        if {$access ne "" && ![dict get $discovered access readable]} {
            error "discovered access log is missing or unreadable"
        }
        set sources {}
        if {$access ne ""} {
            lappend sources ${name}::access
        }
        ::nsmcp::LogCorrelation create $name -systemSearch ${name}::system -accessSearches $sources
        try {
            set common [list -store nsmcp:discovered-logs:[ns_info server]  -cacheDirectory [dict get $discovered cacheDirectory]]
            ::nsmcp::CachedLogSearch create ${name}::system  -path [dict get $discovered system path] {*}$common
            if {$access ne ""} {
                ::nsmcp::CachedLogSearch create ${name}::access -path $access {*}$common
            }
        } on error {message options} {
            $name destroy
            return -options $options $message
        }
        return $name
    }
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: