Bug 1436568 - Missing "Max Connections" metrics for http listener in EAP 7
Summary: Missing "Max Connections" metrics for http listener in EAP 7
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: JBoss Operations Network
Classification: JBoss
Component: Plugin -- JBoss EAP 7
Version: JON 3.3.8
Hardware: Unspecified
OS: Unspecified
medium
medium
Target Milestone: CR01
: One-off release
Assignee: Ruben Vargas Palma
QA Contact: Mike Foley
URL:
Whiteboard:
Depends On:
Blocks: 1327633
TreeView+ depends on / blocked
 
Reported: 2017-03-28 08:30 UTC by Filip Brychta
Modified: 2017-07-13 15:17 UTC (History)
3 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2017-07-13 15:17:53 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)
eap6 screenshot (162.46 KB, image/png)
2017-03-28 08:30 UTC, Filip Brychta
no flags Details
eap7 screenshot (162.56 KB, image/png)
2017-03-28 08:30 UTC, Filip Brychta
no flags Details
EAP7 Configuration screen. (242.92 KB, image/png)
2017-05-24 17:55 UTC, Ruben Vargas Palma
no flags Details


Links
System ID Private Priority Status Summary Last Updated
Red Hat Bugzilla 1417868 0 urgent CLOSED Missing "per minute" web-metrics for EAP 7 2021-02-22 00:41:40 UTC

Internal Links: 1417868

Description Filip Brychta 2017-03-28 08:30:35 UTC
Created attachment 1266867 [details]
eap6 screenshot

Description of problem:
Metric "Max Connections" is available for http connector in EAP7 but not for http listener in EAP 7. It's possible to configure it for both versions.

Version-Release number of selected component (if applicable):
JON 3.3.8 + eap plugin pack update05.ER01

How reproducible:
Always

Steps to Reproduce:
1. import EAP 7 server
2. navigate to Inventory -> Servers -> EAP 7 -> Subsystems -> Web -> undertow -> Servers -> default-servers -> Http Listener -> default -> Monitoring -> Schedules


Actual results:
"Max Connections" metric is not there

Expected results:
"Max Connections" metric should be available

Additional info:
See attached screen shots for EAP6 and EAP7

Comment 1 Filip Brychta 2017-03-28 08:30:59 UTC
Created attachment 1266868 [details]
eap7 screenshot

Comment 2 Filip Brychta 2017-04-06 14:49:35 UTC
Fixing typo in original description:
Description of problem:
Metric "Max Connections" is available for http connector in EAP6 but not for http listener in EAP 7. It's possible to configure it for both versions.

Comment 3 Ruben Vargas Palma 2017-05-24 17:55:31 UTC
Created attachment 1282043 [details]
EAP7 Configuration screen.

I review this and actually it is possible to configure "Max Connections" for undertow subsystem on EAP7. Find attached an screenshot that shows the configuration.

Comment 4 Filip Brychta 2017-05-25 09:04:55 UTC
The issue is about missing metric "Max Connections". It's possible to configure it but corresponding metrics is not available.

Comment 5 Ruben Vargas Palma 2017-06-01 18:13:16 UTC
Hi Filip

I don't see the metric "Max Connections" for that subsystem, I only see configurations. Perhaps I'm missing something..


[standalone@localhost:9990 /] /subsystem=undertow/server=default-server/http-listener=default:read-resource-description(recursive=true)
{
    "outcome" => "success",
    "result" => {
        "description" => "http listener",
        "capabilities" => [{
            "name" => "org.wildfly.undertow.listener",
            "dynamic" => true
        }],
        "access-constraints" => {"sensitive" => {"web-connector" => {"type" => "undertow"}}},
        "attributes" => {
            "allow-encoded-slash" => {
                "type" => BOOLEAN,
                "description" => "If a request comes in with encoded / characters (i.e. %2F), will these be decoded.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => false,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "allow-equals-in-cookie-value" => {
                "type" => BOOLEAN,
                "description" => "If this is true then Undertow will allow non-escaped equals characters in unquoted cookie values. Unquoted cookie values may not contain equals characters. If present the value ends before the equals sign. The remainder of the cookie value will be dropped.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => false,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "always-set-keep-alive" => {
                "type" => BOOLEAN,
                "description" => "If this is true then a Connection: keep-alive header will be added to responses, even when it is not strictly required by the specification.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => true,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "buffer-pipelined-data" => {
                "type" => BOOLEAN,
                "description" => "If we should buffer pipelined requests.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => false,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "buffer-pool" => {
                "type" => STRING,
                "description" => "The listeners buffer pool",
                "expressions-allowed" => false,
                "required" => false,
                "nillable" => true,
                "default" => "default",
                "capability-reference" => "org.wildfly.io.buffer-pool",
                "min-length" => 1L,
                "max-length" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },
            "bytes-received" => {
                "type" => LONG,
                "description" => "The number of bytes that have been received by this listener",
                "expressions-allowed" => false,
                "required" => true,
                "nillable" => false,
                "access-type" => "metric",
                "storage" => "runtime"
            },
            "bytes-sent" => {
                "type" => LONG,
                "description" => "The number of bytes that have been sent out on this listener",
                "expressions-allowed" => false,
                "required" => true,
                "nillable" => false,
                "access-type" => "metric",
                "storage" => "runtime"
            },
            "certificate-forwarding" => {
                "type" => BOOLEAN,
                "description" => "If certificate forwarding should be enabled. If this is enabled then the listener will take the certificate from the SSL_CLIENT_CERT attribute. This should only be enabled if behind a proxy, and the proxy is configured to always set these headers.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => false,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "resource-services"
            },
            "decode-url" => {
                "type" => BOOLEAN,
                "description" => "If this is true then the parser will decode the URL and query parameters using the selected character encoding (UTF-8 by default). If this is false they will not be decoded. This will allow a later handler to decode them into whatever charset is desired.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => true,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "disallowed-methods" => {
                "type" => LIST,
                "description" => "A comma separated list of HTTP methods that are not allowed",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => ["TRACE"],
                "value-type" => STRING,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "resource-services"
            },
            "enable-http2" => {
                "type" => BOOLEAN,
                "description" => "Enables HTTP2 support for this listener",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => false,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },
            "enabled" => {
                "type" => BOOLEAN,
                "description" => "If the listener is enabled",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => true,
                "deprecated" => {
                    "since" => "3.2.0",
                    "reason" => "Enabled attributes are being deprecated, as they cause problems in enforcement of configuration consistency."
                },
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },
            "error-count" => {
                "type" => LONG,
                "description" => "The number of 500 responses that have been sent by this listener",
                "expressions-allowed" => false,
                "required" => true,
                "nillable" => false,
                "access-type" => "metric",
                "storage" => "runtime"
            },
            "http2-enable-push" => {
                "type" => BOOLEAN,
                "description" => "If server push is enabled for this connection",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => true,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },
            "http2-header-table-size" => {
                "type" => INT,
                "description" => "The size of the header table used for HPACK compression, in bytes. This amount of memory will be allocated per connection for compression. Larger values use more memory but may give better compression.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "unit" => "BYTES",
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },
            "http2-initial-window-size" => {
                "type" => INT,
                "description" => "The flow control window size that controls how quickly the client can send data to the server",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "unit" => "BYTES",
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },
            "http2-max-concurrent-streams" => {
                "type" => INT,
                "description" => "The maximum number of HTTP/2 streams that can be active at any time on a single connection",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },
            "http2-max-frame-size" => {
                "type" => INT,
                "description" => "The max HTTP/2 frame size",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "unit" => "BYTES",
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },
            "http2-max-header-list-size" => {
                "type" => INT,
                "description" => "The maximum size of request headers the server is prepared to accept",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "unit" => "BYTES",
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },
            "max-buffered-request-size" => {
                "type" => INT,
                "description" => "Maximum size of a buffered request, in bytes. Requests are not usually buffered, the most common case is when performing SSL renegotiation for a POST request, and the post data must be fully buffered in order to perform the renegotiation.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => 16384,
                "unit" => "BYTES",
                "min" => 1L,
                "max" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "max-connections" => {
                "type" => INT,
                "description" => "The maximum number of concurrent connections. Only values greater than 0 are allowed. For unlimited connections simply undefine this attribute value.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "min" => 1L,
                "max" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "max-cookies" => {
                "type" => INT,
                "description" => "The maximum number of cookies that will be parsed. This is used to protect against hash vulnerabilities.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => 200,
                "min" => 1L,
                "max" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "max-header-size" => {
                "type" => INT,
                "description" => "The maximum size of a http request header, in bytes.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => 1048576,
                "unit" => "BYTES",
                "min" => 1L,
                "max" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "max-headers" => {
                "type" => INT,
                "description" => "The maximum number of headers that will be parsed. This is used to protect against hash vulnerabilities.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => 200,
                "min" => 1L,
                "max" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "max-parameters" => {
                "type" => INT,
                "description" => "The maximum number of parameters that will be parsed. This is used to protect against hash vulnerabilities. This applies to both query parameters, and to POST data, but is not cumulative (i.e. you can potentially have max parameters * 2 total parameters).",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => 1000,
                "min" => 1L,
                "max" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "max-post-size" => {
                "type" => LONG,
                "description" => "The maximum size of a post that will be accepted, in bytes.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => 10485760L,
                "unit" => "BYTES",
                "min" => 1L,
                "max" => 9223372036854775807L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "max-processing-time" => {
                "type" => LONG,
                "description" => "The maximum processing time taken by a request on this listener",
                "expressions-allowed" => false,
                "required" => true,
                "nillable" => false,
                "access-type" => "metric",
                "storage" => "runtime"
            },
            "no-request-timeout" => {
                "type" => INT,
                "description" => "The length of time in milliseconds that the connection can be idle before it is closed by the container.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => 60000,
                "unit" => "MILLISECONDS",
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "processing-time" => {
                "type" => LONG,
                "description" => "The total processing time of all requests handed by this listener",
                "expressions-allowed" => false,
                "required" => true,
                "nillable" => false,
                "access-type" => "metric",
                "storage" => "runtime"
            },
            "proxy-address-forwarding" => {
                "type" => BOOLEAN,
                "description" => "Enables  handling of x-forwarded-host (and other x-forwarded-* headers) and use this header information to set the remote address. This should only be used behind a trusted proxy that sets these headers otherwise a remote user can spoof their IP address.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => false,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "resource-services"
            },
            "read-timeout" => {
                "type" => INT,
                "description" => "Configure a read timeout for a socket, in milliseconds.  If the given amount of time elapses without a successful read taking place, the socket's next read will throw a {@link ReadTimeoutException}.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "unit" => "MILLISECONDS",
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "receive-buffer" => {
                "type" => INT,
                "description" => "The receive buffer size, in bytes.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "min" => 1L,
                "max" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "record-request-start-time" => {
                "type" => BOOLEAN,
                "description" => "If this is true then Undertow will record the request start time, to allow for request time to be logged. This has a small but measurable performance impact",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => false,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "redirect-socket" => {
                "type" => STRING,
                "description" => "If this listener is supporting non-SSL requests, and a request is received for which a matching <security-constraint> requires SSL transport, undertow will automatically redirect the request to the socket binding port specified here.",
                "expressions-allowed" => false,
                "required" => false,
                "nillable" => true,
                "min-length" => 1L,
                "max-length" => 2147483647L,
                "access-constraints" => {"sensitive" => {"socket-binding-ref" => {"type" => "core"}}},
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "resource-services"
            },
            "request-count" => {
                "type" => LONG,
                "description" => "The number of requests this listener has served",
                "expressions-allowed" => false,
                "required" => true,
                "nillable" => false,
                "access-type" => "metric",
                "storage" => "runtime"
            },
            "request-parse-timeout" => {
                "type" => INT,
                "description" => "The maximum amount of time (in milliseconds) that can be spent parsing the request",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "unit" => "MILLISECONDS",
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "require-host-http11" => {
                "type" => BOOLEAN,
                "description" => "Require that all HTTP/1.1 have a 'Host' header, as per the RFC. IF the request does not include this header it will be rejected with a 403.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => false,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },
            "resolve-peer-address" => {
                "type" => BOOLEAN,
                "description" => "Enables host dns lookup",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => false,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "resource-services"
            },
            "secure" => {
                "type" => BOOLEAN,
                "description" => "If this is true then requests that originate from this listener are marked as secure, even if the request is not using HTTPS.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => false,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "resource-services"
            },
            "send-buffer" => {
                "type" => INT,
                "description" => "The send buffer size, in bytes.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "min" => 1L,
                "max" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "socket-binding" => {
                "type" => STRING,
                "description" => "The listener socket binding",
                "expressions-allowed" => false,
                "required" => true,
                "nillable" => false,
                "capability-reference" => "org.wildfly.network.socket-binding",
                "min-length" => 1L,
                "max-length" => 2147483647L,
                "access-constraints" => {"sensitive" => {"socket-binding-ref" => {"type" => "core"}}},
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },
            "tcp-backlog" => {
                "type" => INT,
                "description" => "Configure a server with the specified backlog.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => 10000,
                "min" => 1L,
                "max" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "tcp-keep-alive" => {
                "type" => BOOLEAN,
                "description" => "Configure a channel to send TCP keep-alive messages in an implementation-dependent manner.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "url-charset" => {
                "type" => STRING,
                "description" => "URL charset",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "default" => "UTF-8",
                "min-length" => 1L,
                "max-length" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            },
            "worker" => {
                "type" => STRING,
                "description" => "The listeners XNIO worker",
                "expressions-allowed" => false,
                "required" => false,
                "nillable" => true,
                "default" => "default",
                "capability-reference" => "org.wildfly.io.worker",
                "min-length" => 1L,
                "max-length" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },
            "write-timeout" => {
                "type" => INT,
                "description" => "Configure a write timeout for a socket, in milliseconds.  If the given amount of time elapses without a successful write taking place, the socket's next write will throw a {@link WriteTimeoutException}.",
                "expressions-allowed" => true,
                "required" => false,
                "nillable" => true,
                "unit" => "MILLISECONDS",
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "no-services"
            }
        },
        "operations" => undefined,
        "notifications" => undefined,
        "children" => {}
    }
}

Comment 6 Filip Brychta 2017-06-05 08:18:29 UTC
Hi Ruben,
In case of EAP 6 it's configuration too:
/subsystem=web/connector=http:read-resource-description(recursive=true)
 "max-connections" => {
                "type" => INT,
                "description" => "Amount of concurrent connections that can be processed by the connector with optimum performance. The default value depends on the connector used.",
                "expressions-allowed" => true,
                "nillable" => true,
                "min" => 1L,
                "max" => 2147483647L,
                "access-type" => "read-write",
                "storage" => "configuration",
                "restart-required" => "all-services"
            },

but JON exposes it as metric as well (see attached screenshot).

So to have the same JON view for both EAP 6 and EAP 7, JON should expose this configuration as metric as well for both versions.

Comment 8 Simeon Pinder 2017-06-18 13:45:31 UTC
Moving to ON_QA for testing.


Note You need to log in before you can comment on or make changes to this bug.