From 4fbbe892841df37e32b248c119bd886a910d5083 Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Tue, 3 Sep 2024 14:45:51 -0400 Subject: [PATCH] DTLS tuning --- go.mod | 6 +- go.sum | 22 +- router/forwarder/forwarder.go | 18 +- router/handler_link/payload.go | 2 +- router/handler_xgress/close.go | 3 +- router/handler_xgress/receive.go | 15 +- router/link/link_registry_test.go | 2 +- router/xgress/link_receive_buffer.go | 3 + router/xgress/link_send_buffer.go | 69 +- router/xgress/messages.go | 8 + router/xgress/metrics.go | 2 + router/xgress/retransmitter.go | 86 +- router/xgress/xgress.go | 2 +- router/xgress_edge/perf_test.go | 2 +- router/xlink/xlink.go | 4 +- router/xlink_transport/xlink.go | 55 +- router/xlink_transport/xlink_split.go | 59 +- tests/shaper/main.go | 58 + zititest/go.mod | 6 +- zititest/go.sum | 22 +- zititest/models/dtls/FlowControl.json | 3934 ++++++++++++++++++ zititest/models/dtls/configs/router.yml.tmpl | 27 +- zititest/models/dtls/main.go | 6 + 23 files changed, 4258 insertions(+), 153 deletions(-) create mode 100644 tests/shaper/main.go create mode 100644 zititest/models/dtls/FlowControl.json diff --git a/go.mod b/go.mod index a1d5f3fb5..b6913e104 100644 --- a/go.mod +++ b/go.mod @@ -59,7 +59,7 @@ require ( github.com/openziti/sdk-golang v0.23.40 github.com/openziti/secretstream v0.1.21 github.com/openziti/storage v0.3.0 - github.com/openziti/transport/v2 v2.0.143 + github.com/openziti/transport/v2 v2.0.144-0.20240903212250-65f868ed70b2 github.com/openziti/x509-claims v1.0.3 github.com/openziti/xweb/v2 v2.1.1 github.com/openziti/ziti-db-explorer v1.1.3 @@ -131,6 +131,7 @@ require ( github.com/hashicorp/go-msgpack/v2 v2.1.1 // indirect github.com/hashicorp/golang-lru v0.6.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect + github.com/iancoleman/strcase v0.1.3 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/josharian/native v1.1.0 // indirect @@ -153,7 +154,8 @@ require ( github.com/muhlemmer/httpforwarded v0.1.0 // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b // indirect - github.com/openziti/dilithium v0.3.3 // indirect + github.com/openziti-incubator/cf v0.0.3 // indirect + github.com/openziti/dilithium v0.3.5 // indirect github.com/parallaxsecond/parsec-client-go v0.0.0-20221025095442-f0a77d263cf9 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/pion/dtls/v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 1bd902ef8..3a55c7308 100644 --- a/go.sum +++ b/go.sum @@ -397,6 +397,8 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174 h1:WlZsjVhE8Af9IcZDGgJGQpNflI3+MJSBhsgT5PCtzBQ= github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/iancoleman/strcase v0.1.3 h1:dJBk1m2/qjL1twPLf68JND55vvivMupZ4wIzE8CTdBw= +github.com/iancoleman/strcase v0.1.3/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -433,7 +435,6 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -510,7 +511,7 @@ github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8Ku github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/michaelquigley/pfxlog v0.3.1/go.mod h1:pwJmJ9nN787xk9U+0z8/5nP2GMhU6GGCTfgBWGpiXaQ= +github.com/michaelquigley/pfxlog v0.6.1/go.mod h1:z864Y2uU0O4QA5OoclXIOdoX5Tme2zm66FLAJ+R1jZs= github.com/michaelquigley/pfxlog v0.6.10 h1:IbC/H3MmSDcPlQHF1UZPQU13Dkrs0+ycWRyQd2ihnjw= github.com/michaelquigley/pfxlog v0.6.10/go.mod h1:gEiNTfKEX6cJHSwRpOuqBpc8oYrlhMiDK/xMk/gV7D0= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= @@ -565,14 +566,16 @@ github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je4 github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A= github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b/go.mod h1:AC62GU6hc0BrNm+9RK9VSiwa/EUe1bkIeFORAMcHvJU= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/openziti-incubator/cf v0.0.3 h1:JKs55DbaIxl87nI/Ra/3DHMiz5iaPpu8JjsuN8SnG7w= +github.com/openziti-incubator/cf v0.0.3/go.mod h1:6abCY06bCjKmK2I9kohij+cp9uXIPFiFwSCNZPdMk8E= github.com/openziti/agent v1.0.17 h1:CNBVWl8m4CWXz/pmdWjEhg1rvtUGinQNRAr3vgF90go= github.com/openziti/agent v1.0.17/go.mod h1:GJVKVikwmvZ0U+hNP7Zi2P+xd/wTb6VZ9wz24/2WQ+U= github.com/openziti/channel/v2 v2.0.143 h1:GPbcITZX5+vfGq+i8GJ4WWfoMCuEuDlxd8gIvQGFaH8= github.com/openziti/channel/v2 v2.0.143/go.mod h1:SKka1yjVzBpz8Zy5wuTHHEjfArRo8aGBPs+2XZWheso= github.com/openziti/cobra-to-md v1.0.1 h1:WRinNoIRmwWUSJm+pSNXMjOrtU48oxXDZgeCYQfVXxE= github.com/openziti/cobra-to-md v1.0.1/go.mod h1:FjCpk/yzHF7/r28oSTNr5P57yN5VolpdAtS/g7KNi2c= -github.com/openziti/dilithium v0.3.3 h1:PLgQ6PMNLSTzCFbX/h98cmudgz/cU6TmjdSv5NAPD8k= -github.com/openziti/dilithium v0.3.3/go.mod h1:vsCjI2AU/hon9e+dLhUFbCNGesJDj2ASgkySOcpmvjo= +github.com/openziti/dilithium v0.3.5 h1:+envGNzxc3OyVPiuvtxivQmCsOjdZjtOMLpQBeMz7eM= +github.com/openziti/dilithium v0.3.5/go.mod h1:XONq1iK6te/WwNzkgZHfIDHordMPqb0hMwJ8bs9EfSk= github.com/openziti/edge-api v0.26.25 h1:ueHfs4+dRuWkSFCbduYRsMre3udbUp7xlmjOVbdEX5k= github.com/openziti/edge-api v0.26.25/go.mod h1:Nv/0DxHZ7WtR7sHzLIrUJdgAHrHpIV3s9ftrokeuQzg= github.com/openziti/foundation/v2 v2.0.48 h1:G0/P8XQS+xTAS3KYQ/PHjLFHLABZkLJeNDbPgPTaxU0= @@ -591,8 +594,8 @@ github.com/openziti/secretstream v0.1.21 h1:r4xN8/CzSEvxZFFYGSztrlhMtIvk3B+SQcq2 github.com/openziti/secretstream v0.1.21/go.mod h1:1lfAnS8gBHsKZiPbRRK1sularbAsqizN6tWUEuZSfo0= github.com/openziti/storage v0.3.0 h1:DH2SN8GYy7rSlBZM9X5W1Dv2b2qZ8kSKyt0iivokVMw= github.com/openziti/storage v0.3.0/go.mod h1:1f6cGRKYLzwst5hwVY+qr8GCcUeO/U5jJftE8+qFqbk= -github.com/openziti/transport/v2 v2.0.143 h1:qhqI/yEN4SvP8SBx7ERCt0x67Im+Icy/hGtJ7Dn/xOQ= -github.com/openziti/transport/v2 v2.0.143/go.mod h1:3BxxlWa8fbhmZG1CmIOpeEHlCCY1G7DPx7v7+bAXYEQ= +github.com/openziti/transport/v2 v2.0.144-0.20240903212250-65f868ed70b2 h1:0C8EQYAiRygEE17K0b/AZuIKuh5G41j299kAfuMVKhU= +github.com/openziti/transport/v2 v2.0.144-0.20240903212250-65f868ed70b2/go.mod h1:HtxMLtUusJMrXghLy650CRVodXXs9fjf4QFPZ9yzR64= github.com/openziti/x509-claims v1.0.3 h1:HNdQ8Nf1agB3lBs1gahcO6zfkeS4S5xoQ2/PkY4HRX0= github.com/openziti/x509-claims v1.0.3/go.mod h1:Z0WIpBm6c4ecrpRKrou6Gk2wrLWxJO/+tuUwKh8VewE= github.com/openziti/xweb/v2 v2.1.1 h1:T6vbmG2189WWwq16wryM7RQEbT5wNARrVHNQs23jEPE= @@ -714,7 +717,6 @@ github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYED github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= @@ -739,6 +741,7 @@ github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= +github.com/spf13/cobra v1.2.0/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= @@ -855,7 +858,6 @@ golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190422183909-d864b10871cd/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -865,7 +867,7 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= @@ -1062,7 +1064,6 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200918174421-af09f7315aff/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1350,7 +1351,6 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/router/forwarder/forwarder.go b/router/forwarder/forwarder.go index 12fecc219..fe432f17a 100644 --- a/router/forwarder/forwarder.go +++ b/router/forwarder/forwarder.go @@ -43,7 +43,7 @@ type Forwarder struct { } type Destination interface { - SendPayload(payload *xgress.Payload) error + SendPayload(payload *xgress.Payload, timeout time.Duration, payloadType xgress.PayloadType) error SendAcknowledgement(acknowledgement *xgress.Acknowledgement) error SendControl(control *xgress.Control) error InspectCircuit(detail *inspect.CircuitInspectDetail) @@ -165,22 +165,28 @@ func (forwarder *Forwarder) EndCircuit(circuitId string) { forwarder.UnregisterDestinations(circuitId) } -func (forwarder *Forwarder) ForwardPayload(srcAddr xgress.Address, payload *xgress.Payload) error { - return forwarder.forwardPayload(srcAddr, payload, true) +func (forwarder *Forwarder) ForwardPayload(srcAddr xgress.Address, payload *xgress.Payload, timeout time.Duration) error { + return forwarder.forwardPayload(srcAddr, payload, true, timeout) } func (forwarder *Forwarder) RetransmitPayload(srcAddr xgress.Address, payload *xgress.Payload) error { - return forwarder.forwardPayload(srcAddr, payload, false) + return forwarder.forwardPayload(srcAddr, payload, false, time.Second) } -func (forwarder *Forwarder) forwardPayload(srcAddr xgress.Address, payload *xgress.Payload, markActive bool) error { +func (forwarder *Forwarder) forwardPayload(srcAddr xgress.Address, payload *xgress.Payload, markActive bool, timeout time.Duration) error { log := pfxlog.ContextLogger(string(srcAddr)) circuitId := payload.GetCircuitId() if forwardTable, found := forwarder.circuits.getForwardTable(circuitId, markActive); found { if dstAddr, found := forwardTable.getForwardAddress(srcAddr); found { if dst, found := forwarder.destinations.getDestination(dstAddr); found { - if err := dst.SendPayload(payload); err != nil { + payloadType := xgress.PayloadTypeXg + if !markActive { + payloadType = xgress.PayloadTypeRtx + } else if timeout == 0 { + payloadType = xgress.PayloadTypeFwd + } + if err := dst.SendPayload(payload, timeout, payloadType); err != nil { return err } log.WithFields(payload.GetLoggerFields()).Debugf("=> %s", string(dstAddr)) diff --git a/router/handler_link/payload.go b/router/handler_link/payload.go index 85110fd44..3c97c3e49 100644 --- a/router/handler_link/payload.go +++ b/router/handler_link/payload.go @@ -47,7 +47,7 @@ func (self *payloadHandler) HandleReceive(msg *channel.Message, ch channel.Chann payload, err := xgress.UnmarshallPayload(msg) if err == nil { - if err = self.forwarder.ForwardPayload(xgress.Address(self.link.Id()), payload); err != nil { + if err = self.forwarder.ForwardPayload(xgress.Address(self.link.Id()), payload, 0); err != nil { log.WithError(err).Debug("unable to forward") self.forwarder.ReportForwardingFault(payload.CircuitId, "") } diff --git a/router/handler_xgress/close.go b/router/handler_xgress/close.go index 1346eeacd..8b4701b75 100644 --- a/router/handler_xgress/close.go +++ b/router/handler_xgress/close.go @@ -23,6 +23,7 @@ import ( "github.com/openziti/ziti/router/env" "github.com/openziti/ziti/router/forwarder" "github.com/openziti/ziti/router/xgress" + "time" ) type closeHandler struct { @@ -41,7 +42,7 @@ func (txc *closeHandler) HandleXgressClose(x *xgress.Xgress) { x.ForwardEndOfCircuit(func(payload *xgress.Payload) bool { log.Debug("sending end of circuit payload") - if err := txc.forwarder.ForwardPayload(x.Address(), payload); err != nil { + if err := txc.forwarder.ForwardPayload(x.Address(), payload, time.Second); err != nil { // ok that we couldn't forward close, as that means it was already closed log.Debugf("error forwarding end circuit payload (%s)", err) return false diff --git a/router/handler_xgress/receive.go b/router/handler_xgress/receive.go index be53786cf..e10bb9834 100644 --- a/router/handler_xgress/receive.go +++ b/router/handler_xgress/receive.go @@ -18,8 +18,10 @@ package handler_xgress import ( "github.com/michaelquigley/pfxlog" + "github.com/openziti/channel/v2" "github.com/openziti/ziti/router/forwarder" "github.com/openziti/ziti/router/xgress" + "time" ) type receiveHandler struct { @@ -33,9 +35,16 @@ func NewReceiveHandler(forwarder *forwarder.Forwarder) *receiveHandler { } func (xrh *receiveHandler) HandleXgressReceive(payload *xgress.Payload, x *xgress.Xgress) { - if err := xrh.forwarder.ForwardPayload(x.Address(), payload); err != nil { - pfxlog.ContextLogger(x.Label()).WithFields(payload.GetLoggerFields()).WithError(err).Error("unable to forward payload") - xrh.forwarder.ReportForwardingFault(payload.CircuitId, x.CtrlId()) + for { + if err := xrh.forwarder.ForwardPayload(x.Address(), payload, time.Second); err != nil { + if !channel.IsTimeout(err) { + pfxlog.ContextLogger(x.Label()).WithFields(payload.GetLoggerFields()).WithError(err).Error("unable to forward payload") + xrh.forwarder.ReportForwardingFault(payload.CircuitId, x.CtrlId()) + return + } + } else { + return + } } } diff --git a/router/link/link_registry_test.go b/router/link/link_registry_test.go index eeb99d017..9bfac700e 100644 --- a/router/link/link_registry_test.go +++ b/router/link/link_registry_test.go @@ -80,7 +80,7 @@ func (self *testLink) Id() string { return self.id } -func (self *testLink) SendPayload(payload *xgress.Payload) error { +func (self *testLink) SendPayload(payload *xgress.Payload, timeout time.Duration, payloadType xgress.PayloadType) error { panic("implement me") } diff --git a/router/xgress/link_receive_buffer.go b/router/xgress/link_receive_buffer.go index e2347da66..3f638b4bc 100644 --- a/router/xgress/link_receive_buffer.go +++ b/router/xgress/link_receive_buffer.go @@ -47,6 +47,7 @@ func (buffer *LinkReceiveBuffer) Size() uint32 { func (buffer *LinkReceiveBuffer) ReceiveUnordered(payload *Payload, maxSize uint32) bool { if payload.GetSequence() <= buffer.sequence { + duplicatePayloadsMeter.Mark(1) return true } @@ -64,6 +65,8 @@ func (buffer *LinkReceiveBuffer) ReceiveUnordered(payload *Payload, maxSize uint if payload.Sequence > buffer.maxSequence { buffer.maxSequence = payload.Sequence } + } else { + duplicatePayloadsMeter.Mark(1) } return true } diff --git a/router/xgress/link_send_buffer.go b/router/xgress/link_send_buffer.go index f862c33a4..6fa8e0b74 100644 --- a/router/xgress/link_send_buffer.go +++ b/router/xgress/link_send_buffer.go @@ -23,12 +23,12 @@ import ( "github.com/pkg/errors" "github.com/sirupsen/logrus" "math" + "slices" "sync/atomic" "time" ) type PayloadBufferForwarder interface { - ForwardPayload(srcAddr Address, payload *Payload) error RetransmitPayload(srcAddr Address, payload *Payload) error ForwardAcknowledgement(srcAddr Address, acknowledgement *Acknowledgement) error } @@ -162,7 +162,7 @@ func (buffer *LinkSendBuffer) Close() { func (buffer *LinkSendBuffer) isBlocked() bool { blocked := false - if buffer.windowsSize < buffer.linkRecvBufferSize { + if buffer.x.Options.TxPortalMaxSize < buffer.linkRecvBufferSize { blocked = true if !buffer.blockedByRemoteWindow { buffer.blockedByRemoteWindow = true @@ -203,17 +203,13 @@ func (buffer *LinkSendBuffer) run() { for { // bias acks, process all pending, since that should not block - processingAcks := true - for processingAcks { - select { - case ack := <-buffer.newlyReceivedAcks: - buffer.receiveAcknowledgement(ack) - case <-buffer.closeNotify: - buffer.close() - return - default: - processingAcks = false - } + select { + case ack := <-buffer.newlyReceivedAcks: + buffer.receiveAcknowledgement(ack) + case <-buffer.closeNotify: + buffer.close() + return + default: } // don't block when we're closing, since the only thing that should still be coming in is end-of-circuit @@ -222,6 +218,21 @@ func (buffer *LinkSendBuffer) run() { buffered = nil } else { buffered = buffer.newlyBuffered + + select { + case txPayload := <-buffered: + buffer.buffer[txPayload.payload.GetSequence()] = txPayload + payloadSize := len(txPayload.payload.Data) + buffer.linkSendBufferSize += uint32(payloadSize) + atomic.AddInt64(&outstandingPayloads, 1) + atomic.AddInt64(&outstandingPayloadBytes, int64(payloadSize)) + log.Tracef("buffering payload %v with size %v. payload buffer size: %v", + txPayload.payload.Sequence, len(txPayload.payload.Data), buffer.linkSendBufferSize) + case <-buffer.closeNotify: + buffer.close() + return + default: + } } select { @@ -289,7 +300,7 @@ func (buffer *LinkSendBuffer) receiveAcknowledgement(ack *Acknowledgement) { if buffer.windowsSize > buffer.x.Options.TxPortalMaxSize { buffer.windowsSize = buffer.x.Options.TxPortalMaxSize } - buffer.retxScale -= 0.02 + buffer.retxScale -= 0.01 if buffer.retxScale < buffer.x.Options.RetxScale { buffer.retxScale = buffer.x.Options.RetxScale } @@ -321,17 +332,27 @@ func (buffer *LinkSendBuffer) retransmit() { log := pfxlog.ContextLogger(buffer.x.Label()) retransmitted := 0 + var rtxList []*txPayload for _, v := range buffer.buffer { - if v.isRetransmittable() && uint32(now-v.getAge()) >= buffer.retxThreshold { - v.markQueued() - retransmitter.queue(v) - retransmitted++ - buffer.retransmits++ - if buffer.retransmits >= buffer.x.Options.TxPortalRetxThresh { - buffer.accumulator = 0 - buffer.retransmits = 0 - buffer.scale(buffer.x.Options.TxPortalRetxScale) - } + age := v.getAge() + if age != math.MaxInt64 && v.isRetransmittable() && uint32(now-age) >= buffer.retxThreshold { + rtxList = append(rtxList, v) + } + } + + slices.SortFunc(rtxList, func(a, b *txPayload) int { + return int(a.payload.Sequence - b.payload.Sequence) + }) + + for _, v := range rtxList { + v.markQueued() + retransmitter.queue(v) + retransmitted++ + buffer.retransmits++ + if buffer.retransmits >= buffer.x.Options.TxPortalRetxThresh { + buffer.accumulator = 0 + buffer.retransmits = 0 + buffer.scale(buffer.x.Options.TxPortalRetxScale) } } diff --git a/router/xgress/messages.go b/router/xgress/messages.go index 71954b6d0..07b17651f 100644 --- a/router/xgress/messages.go +++ b/router/xgress/messages.go @@ -200,6 +200,14 @@ func (ack *Acknowledgement) GetLoggerFields() logrus.Fields { } } +type PayloadType byte + +const ( + PayloadTypeXg PayloadType = 1 + PayloadTypeRtx PayloadType = 2 + PayloadTypeFwd PayloadType = 3 +) + type Payload struct { Header Sequence int32 diff --git a/router/xgress/metrics.go b/router/xgress/metrics.go index bfaf44a76..1aa49a415 100644 --- a/router/xgress/metrics.go +++ b/router/xgress/metrics.go @@ -14,6 +14,7 @@ var retransmissionFailures metrics.Meter var ackFailures metrics.Meter var payloadWriteTimer metrics.Timer var duplicateAcksMeter metrics.Meter +var duplicatePayloadsMeter metrics.Meter var buffersBlockedByLocalWindow int64 var buffersBlockedByRemoteWindow int64 @@ -29,6 +30,7 @@ func InitMetrics(registry metrics.UsageRegistry) { ackFailures = registry.Meter("xgress.ack_failures") payloadWriteTimer = registry.Timer("xgress.tx_write_time") duplicateAcksMeter = registry.Meter("xgress.ack_duplicates") + duplicatePayloadsMeter = registry.Meter("xgress.payload_duplicates") registry.FuncGauge("xgress.blocked_by_local_window", func() int64 { return atomic.LoadInt64(&buffersBlockedByLocalWindow) diff --git a/router/xgress/retransmitter.go b/router/xgress/retransmitter.go index 90d7624ef..c5ce591d5 100644 --- a/router/xgress/retransmitter.go +++ b/router/xgress/retransmitter.go @@ -46,111 +46,111 @@ func NewRetransmitter(forwarder PayloadBufferForwarder, faultReporter Retransmit return ctrl } -func (retransmitter *Retransmitter) queue(p *txPayload) { - retransmitter.retransmitIngest <- p +func (self *Retransmitter) queue(p *txPayload) { + self.retransmitIngest <- p } -func (retransmitter *Retransmitter) popHead() *txPayload { - if retransmitter.retxHead == nil { +func (self *Retransmitter) popHead() *txPayload { + if self.retxHead == nil { return nil } - result := retransmitter.retxHead + result := self.retxHead if result.prev == nil { - retransmitter.retxHead = nil - retransmitter.retxTail = nil + self.retxHead = nil + self.retxTail = nil } else { - retransmitter.retxHead = result.prev + self.retxHead = result.prev result.prev.next = nil } result.prev = nil result.next = nil - atomic.AddInt64(&retransmitter.retransmitsQueueSize, -1) + atomic.AddInt64(&self.retransmitsQueueSize, -1) return result } -func (retransmitter *Retransmitter) pushTail(txp *txPayload) { - if txp.prev != nil || txp.next != nil || txp == retransmitter.retxHead { +func (self *Retransmitter) pushTail(txp *txPayload) { + if txp.prev != nil || txp.next != nil || txp == self.retxHead { return } - if retransmitter.retxHead == nil { - retransmitter.retxTail = txp - retransmitter.retxHead = txp + if self.retxHead == nil { + self.retxTail = txp + self.retxHead = txp } else { - txp.next = retransmitter.retxTail - retransmitter.retxTail.prev = txp - retransmitter.retxTail = txp + txp.next = self.retxTail + self.retxTail.prev = txp + self.retxTail = txp } - atomic.AddInt64(&retransmitter.retransmitsQueueSize, 1) + atomic.AddInt64(&self.retransmitsQueueSize, 1) } -func (retransmitter *Retransmitter) delete(txp *txPayload) { - if retransmitter.retxHead == txp { - retransmitter.popHead() - } else if txp == retransmitter.retxTail { - retransmitter.retxTail = txp.next - retransmitter.retxTail.prev = nil - atomic.AddInt64(&retransmitter.retransmitsQueueSize, -1) +func (self *Retransmitter) delete(txp *txPayload) { + if self.retxHead == txp { + self.popHead() + } else if txp == self.retxTail { + self.retxTail = txp.next + self.retxTail.prev = nil + atomic.AddInt64(&self.retransmitsQueueSize, -1) } else if txp.prev != nil { txp.prev.next = txp.next txp.next.prev = txp.prev - atomic.AddInt64(&retransmitter.retransmitsQueueSize, -1) + atomic.AddInt64(&self.retransmitsQueueSize, -1) } txp.prev = nil txp.next = nil } -func (retransmitter *Retransmitter) retransmitIngester() { +func (self *Retransmitter) retransmitIngester() { var next *txPayload for { if next == nil { - next = retransmitter.popHead() + next = self.popHead() } if next == nil { select { - case retransmit := <-retransmitter.retransmitIngest: - retransmitter.acceptRetransmit(retransmit) - case <-retransmitter.closeNotify: + case retransmit := <-self.retransmitIngest: + self.acceptRetransmit(retransmit) + case <-self.closeNotify: return } } else { select { - case retransmit := <-retransmitter.retransmitIngest: - retransmitter.acceptRetransmit(retransmit) - case retransmitter.retransmitSend <- next: + case retransmit := <-self.retransmitIngest: + self.acceptRetransmit(retransmit) + case self.retransmitSend <- next: next = nil - case <-retransmitter.closeNotify: + case <-self.closeNotify: return } } } } -func (retransmitter *Retransmitter) acceptRetransmit(txp *txPayload) { +func (self *Retransmitter) acceptRetransmit(txp *txPayload) { if txp.isAcked() { - retransmitter.delete(txp) + self.delete(txp) } else { - retransmitter.pushTail(txp) + self.pushTail(txp) } } -func (retransmitter *Retransmitter) retransmitSender() { +func (self *Retransmitter) retransmitSender() { logger := pfxlog.Logger() for { select { - case retransmit := <-retransmitter.retransmitSend: + case retransmit := <-self.retransmitSend: if !retransmit.isAcked() { - if err := retransmitter.forwarder.RetransmitPayload(retransmit.x.address, retransmit.payload); err != nil { + if err := self.forwarder.RetransmitPayload(retransmit.x.address, retransmit.payload); err != nil { // if xgress is closed, don't log the error. We still want to try retransmitting in case we're re-sending end of circuit if !retransmit.x.Closed() { logger.WithError(err).Errorf("unexpected error while retransmitting payload from [@/%v]", retransmit.x.address) retransmissionFailures.Mark(1) - retransmitter.faultReporter.ReportForwardingFault(retransmit.payload.CircuitId, retransmit.x.ctrlId) + self.faultReporter.ReportForwardingFault(retransmit.payload.CircuitId, retransmit.x.ctrlId) } else { logger.WithError(err).Tracef("unexpected error while retransmitting payload from [@/%v] (already closed)", retransmit.x.address) } @@ -160,7 +160,7 @@ func (retransmitter *Retransmitter) retransmitSender() { } retransmit.dequeued() } - case <-retransmitter.closeNotify: + case <-self.closeNotify: return } } diff --git a/router/xgress/xgress.go b/router/xgress/xgress.go index f5ed1e479..9cab915ff 100644 --- a/router/xgress/xgress.go +++ b/router/xgress/xgress.go @@ -353,7 +353,7 @@ func (self *Xgress) Closed() bool { return self.flags.IsSet(closedFlag) } -func (self *Xgress) SendPayload(payload *Payload) error { +func (self *Xgress) SendPayload(payload *Payload, _ time.Duration, _ PayloadType) error { if self.Closed() { return nil } diff --git a/router/xgress_edge/perf_test.go b/router/xgress_edge/perf_test.go index 74332580c..31a31f48e 100644 --- a/router/xgress_edge/perf_test.go +++ b/router/xgress_edge/perf_test.go @@ -75,7 +75,7 @@ func (link *mirrorLink) Id() string { return "router1" } -func (link *mirrorLink) SendPayload(payload *xgress.Payload) error { +func (link *mirrorLink) SendPayload(payload *xgress.Payload, _ time.Duration, _ xgress.PayloadType) error { ack := &xgress.Acknowledgement{ Header: xgress.Header{ CircuitId: "test", diff --git a/router/xlink/xlink.go b/router/xlink/xlink.go index 18524b67b..e487f7521 100644 --- a/router/xlink/xlink.go +++ b/router/xlink/xlink.go @@ -114,7 +114,7 @@ type Dialer interface { type LinkDestination interface { Id() string - SendPayload(payload *xgress.Payload) error + SendPayload(payload *xgress.Payload, timeout time.Duration, payloadType xgress.PayloadType) error SendAcknowledgement(acknowledgement *xgress.Acknowledgement) error SendControl(control *xgress.Control) error InspectCircuit(circuitDetail *inspect.CircuitInspectDetail) @@ -141,7 +141,7 @@ type Xlink interface { } type Forwarder interface { - ForwardPayload(srcAddr xgress.Address, payload *xgress.Payload) error + ForwardPayload(srcAddr xgress.Address, payload *xgress.Payload, timeout time.Duration) error ForwardAcknowledgement(srcAddr xgress.Address, acknowledgement *xgress.Acknowledgement) error ForwardControl(srcAddr xgress.Address, control *xgress.Control) error } diff --git a/router/xlink_transport/xlink.go b/router/xlink_transport/xlink.go index 29c15cdcd..08e4eaec1 100644 --- a/router/xlink_transport/xlink.go +++ b/router/xlink_transport/xlink.go @@ -23,22 +23,27 @@ import ( "github.com/openziti/ziti/common/pb/ctrl_pb" "github.com/openziti/ziti/router/xgress" "sync/atomic" + "time" ) type impl struct { - id string - key string - ch channel.Channel - routerId string - routerVersion string - linkProtocol string - dialAddress string - closed atomic.Bool - faultsSent atomic.Bool - droppedMsgMeter metrics.Meter - dialed bool - iteration uint32 - dupsRejected uint32 + id string + key string + ch channel.Channel + routerId string + routerVersion string + linkProtocol string + dialAddress string + closed atomic.Bool + faultsSent atomic.Bool + dialed bool + iteration uint32 + dupsRejected uint32 + + droppedMsgMeter metrics.Meter + droppedXgMsgMeter metrics.Meter + droppedRtxMsgMeter metrics.Meter + droppedFwdMsgMeter metrics.Meter } func (self *impl) Id() string { @@ -56,16 +61,30 @@ func (self *impl) Iteration() uint32 { func (self *impl) Init(metricsRegistry metrics.Registry) error { if self.droppedMsgMeter == nil { self.droppedMsgMeter = metricsRegistry.Meter("link.dropped_msgs:" + self.id) + self.droppedXgMsgMeter = metricsRegistry.Meter("link.dropped_xg_msgs:" + self.id) + self.droppedRtxMsgMeter = metricsRegistry.Meter("link.dropped_rtx_msgs:" + self.id) + self.droppedFwdMsgMeter = metricsRegistry.Meter("link.dropped_fwd_msgs:" + self.id) } return nil } -func (self *impl) SendPayload(msg *xgress.Payload) error { - sent, err := self.ch.TrySend(msg.Marshall()) - if err == nil && !sent { - self.droppedMsgMeter.Mark(1) +func (self *impl) SendPayload(msg *xgress.Payload, timeout time.Duration, payloadType xgress.PayloadType) error { + if timeout == 0 { + sent, err := self.ch.TrySend(msg.Marshall()) + if err == nil && !sent { + self.droppedMsgMeter.Mark(1) + if payloadType == xgress.PayloadTypeXg { + self.droppedXgMsgMeter.Mark(1) + } else if payloadType == xgress.PayloadTypeRtx { + self.droppedRtxMsgMeter.Mark(1) + } else if payloadType == xgress.PayloadTypeFwd { + self.droppedFwdMsgMeter.Mark(1) + } + } + return err } - return err + + return msg.Marshall().WithTimeout(timeout).Send(self.ch) } func (self *impl) SendAcknowledgement(msg *xgress.Acknowledgement) error { diff --git a/router/xlink_transport/xlink_split.go b/router/xlink_transport/xlink_split.go index 54f1703cf..9ecabfbbd 100644 --- a/router/xlink_transport/xlink_split.go +++ b/router/xlink_transport/xlink_split.go @@ -25,24 +25,29 @@ import ( "github.com/pkg/errors" "sync" "sync/atomic" + "time" ) type splitImpl struct { - id string - key string - payloadCh channel.Channel - ackCh channel.Channel - routerId string - routerVersion string - linkProtocol string - dialAddress string - closed atomic.Bool - faultsSent atomic.Bool - droppedMsgMeter metrics.Meter - dialed bool - iteration uint32 - dupsRejected uint32 - lock sync.Mutex + id string + key string + payloadCh channel.Channel + ackCh channel.Channel + routerId string + routerVersion string + linkProtocol string + dialAddress string + closed atomic.Bool + faultsSent atomic.Bool + dialed bool + iteration uint32 + dupsRejected uint32 + lock sync.Mutex + + droppedMsgMeter metrics.Meter + droppedXgMsgMeter metrics.Meter + droppedRtxMsgMeter metrics.Meter + droppedFwdMsgMeter metrics.Meter } func (self *splitImpl) Id() string { @@ -60,6 +65,9 @@ func (self *splitImpl) Iteration() uint32 { func (self *splitImpl) Init(metricsRegistry metrics.Registry) error { if self.droppedMsgMeter == nil { self.droppedMsgMeter = metricsRegistry.Meter("link.dropped_msgs:" + self.id) + self.droppedXgMsgMeter = metricsRegistry.Meter("link.dropped_xg_msgs:" + self.id) + self.droppedRtxMsgMeter = metricsRegistry.Meter("link.dropped_rtx_msgs:" + self.id) + self.droppedFwdMsgMeter = metricsRegistry.Meter("link.dropped_fwd_msgs:" + self.id) } return nil } @@ -70,12 +78,23 @@ func (self *splitImpl) syncInit(f func() error) error { return f() } -func (self *splitImpl) SendPayload(msg *xgress.Payload) error { - sent, err := self.payloadCh.TrySend(msg.Marshall()) - if err == nil && !sent { - self.droppedMsgMeter.Mark(1) +func (self *splitImpl) SendPayload(msg *xgress.Payload, timeout time.Duration, payloadType xgress.PayloadType) error { + if timeout == 0 { + sent, err := self.payloadCh.TrySend(msg.Marshall()) + if err == nil && !sent { + self.droppedMsgMeter.Mark(1) + if payloadType == xgress.PayloadTypeXg { + self.droppedXgMsgMeter.Mark(1) + } else if payloadType == xgress.PayloadTypeRtx { + self.droppedRtxMsgMeter.Mark(1) + } else if payloadType == xgress.PayloadTypeFwd { + self.droppedFwdMsgMeter.Mark(1) + } + } + return err } - return err + + return msg.Marshall().WithTimeout(timeout).Send(self.payloadCh) } func (self *splitImpl) SendAcknowledgement(msg *xgress.Acknowledgement) error { diff --git a/tests/shaper/main.go b/tests/shaper/main.go new file mode 100644 index 000000000..378747b41 --- /dev/null +++ b/tests/shaper/main.go @@ -0,0 +1,58 @@ +package main + +import ( + "fmt" + "github.com/openziti/metrics" + "github.com/openziti/transport/v2/shaper" + "sync/atomic" + "time" +) + +type metricsWriter struct { + m metrics.Meter +} + +func (self *metricsWriter) Write(p []byte) (n int, err error) { + l := len(p) + self.m.Mark(int64(l)) + return l, nil +} + +func printRate(rate float64, desc string) { + units := []string{"B", "K", "M", "G", "T", "P"} + index := 0 + for rate > 1000 { + rate = rate / 1000 + index++ + } + fmt.Printf("%s: %.2f%s\n", desc, rate, units[index]) +} + +func main() { + r := metrics.NewRegistry("test", nil) + meter := r.Meter("writes") + w := &metricsWriter{m: meter} + f := shaper.LimitWriter(w, time.Second, 500000) + + var written int64 + + go func() { + var last int64 + for { + rate := r.Poll().Meters["writes"].M1Rate + printRate(rate, "m1_rate") + + cur := atomic.LoadInt64(&written) + rate = float64(cur - last) + last = cur + printRate(rate, "alt_rate") + time.Sleep(time.Second) + } + }() + + b := make([]byte, 1500) + for { + n, _ := f.Write(b) + atomic.AddInt64(&written, int64(n)) + } +} diff --git a/zititest/go.mod b/zititest/go.mod index 2a7de85a6..464aea249 100644 --- a/zititest/go.mod +++ b/zititest/go.mod @@ -18,7 +18,7 @@ require ( github.com/openziti/identity v1.0.84 github.com/openziti/sdk-golang v0.23.40 github.com/openziti/storage v0.3.0 - github.com/openziti/transport/v2 v2.0.143 + github.com/openziti/transport/v2 v2.0.144-0.20240903212250-65f868ed70b2 github.com/openziti/ziti v0.28.3 github.com/orcaman/concurrent-map/v2 v2.0.1 github.com/pkg/errors v0.9.1 @@ -98,6 +98,7 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/raft v1.7.0 // indirect github.com/hashicorp/raft-boltdb v0.0.0-20220329195025-15018e9b97e0 // indirect + github.com/iancoleman/strcase v0.1.3 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/influxdata/influxdb-client-go/v2 v2.13.0 // indirect github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d // indirect @@ -137,8 +138,9 @@ require ( github.com/oklog/ulid v1.3.1 // indirect github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 // indirect github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b // indirect + github.com/openziti-incubator/cf v0.0.3 // indirect github.com/openziti/cobra-to-md v1.0.1 // indirect - github.com/openziti/dilithium v0.3.3 // indirect + github.com/openziti/dilithium v0.3.5 // indirect github.com/openziti/jwks v1.0.3 // indirect github.com/openziti/metrics v1.2.57 // indirect github.com/openziti/runzmd v1.0.50 // indirect diff --git a/zititest/go.sum b/zititest/go.sum index fec947258..a47679181 100644 --- a/zititest/go.sum +++ b/zititest/go.sum @@ -400,6 +400,8 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174 h1:WlZsjVhE8Af9IcZDGgJGQpNflI3+MJSBhsgT5PCtzBQ= github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/iancoleman/strcase v0.1.3 h1:dJBk1m2/qjL1twPLf68JND55vvivMupZ4wIzE8CTdBw= +github.com/iancoleman/strcase v0.1.3/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -446,7 +448,6 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -526,7 +527,7 @@ github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQ github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/michaelquigley/figlet v0.0.0-20191015203154-054d06db54b4 h1:O0aAES+Hu4tySETys37Xd1wMcUohr5X7yM3qaRSHKRw= github.com/michaelquigley/figlet v0.0.0-20191015203154-054d06db54b4/go.mod h1:ZgenLagNkpruEGzNeXiQH9RtZedSLKw1WlDTJWPZzpk= -github.com/michaelquigley/pfxlog v0.3.1/go.mod h1:pwJmJ9nN787xk9U+0z8/5nP2GMhU6GGCTfgBWGpiXaQ= +github.com/michaelquigley/pfxlog v0.6.1/go.mod h1:z864Y2uU0O4QA5OoclXIOdoX5Tme2zm66FLAJ+R1jZs= github.com/michaelquigley/pfxlog v0.6.10 h1:IbC/H3MmSDcPlQHF1UZPQU13Dkrs0+ycWRyQd2ihnjw= github.com/michaelquigley/pfxlog v0.6.10/go.mod h1:gEiNTfKEX6cJHSwRpOuqBpc8oYrlhMiDK/xMk/gV7D0= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= @@ -587,14 +588,16 @@ github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je4 github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A= github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b/go.mod h1:AC62GU6hc0BrNm+9RK9VSiwa/EUe1bkIeFORAMcHvJU= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/openziti-incubator/cf v0.0.3 h1:JKs55DbaIxl87nI/Ra/3DHMiz5iaPpu8JjsuN8SnG7w= +github.com/openziti-incubator/cf v0.0.3/go.mod h1:6abCY06bCjKmK2I9kohij+cp9uXIPFiFwSCNZPdMk8E= github.com/openziti/agent v1.0.17 h1:CNBVWl8m4CWXz/pmdWjEhg1rvtUGinQNRAr3vgF90go= github.com/openziti/agent v1.0.17/go.mod h1:GJVKVikwmvZ0U+hNP7Zi2P+xd/wTb6VZ9wz24/2WQ+U= github.com/openziti/channel/v2 v2.0.143 h1:GPbcITZX5+vfGq+i8GJ4WWfoMCuEuDlxd8gIvQGFaH8= github.com/openziti/channel/v2 v2.0.143/go.mod h1:SKka1yjVzBpz8Zy5wuTHHEjfArRo8aGBPs+2XZWheso= github.com/openziti/cobra-to-md v1.0.1 h1:WRinNoIRmwWUSJm+pSNXMjOrtU48oxXDZgeCYQfVXxE= github.com/openziti/cobra-to-md v1.0.1/go.mod h1:FjCpk/yzHF7/r28oSTNr5P57yN5VolpdAtS/g7KNi2c= -github.com/openziti/dilithium v0.3.3 h1:PLgQ6PMNLSTzCFbX/h98cmudgz/cU6TmjdSv5NAPD8k= -github.com/openziti/dilithium v0.3.3/go.mod h1:vsCjI2AU/hon9e+dLhUFbCNGesJDj2ASgkySOcpmvjo= +github.com/openziti/dilithium v0.3.5 h1:+envGNzxc3OyVPiuvtxivQmCsOjdZjtOMLpQBeMz7eM= +github.com/openziti/dilithium v0.3.5/go.mod h1:XONq1iK6te/WwNzkgZHfIDHordMPqb0hMwJ8bs9EfSk= github.com/openziti/edge-api v0.26.25 h1:ueHfs4+dRuWkSFCbduYRsMre3udbUp7xlmjOVbdEX5k= github.com/openziti/edge-api v0.26.25/go.mod h1:Nv/0DxHZ7WtR7sHzLIrUJdgAHrHpIV3s9ftrokeuQzg= github.com/openziti/fablab v0.5.60 h1:RsqrEb3LV6asK5N97uZKyNSDhcNOeDcAuT4OAD/hY9Y= @@ -615,8 +618,8 @@ github.com/openziti/secretstream v0.1.21 h1:r4xN8/CzSEvxZFFYGSztrlhMtIvk3B+SQcq2 github.com/openziti/secretstream v0.1.21/go.mod h1:1lfAnS8gBHsKZiPbRRK1sularbAsqizN6tWUEuZSfo0= github.com/openziti/storage v0.3.0 h1:DH2SN8GYy7rSlBZM9X5W1Dv2b2qZ8kSKyt0iivokVMw= github.com/openziti/storage v0.3.0/go.mod h1:1f6cGRKYLzwst5hwVY+qr8GCcUeO/U5jJftE8+qFqbk= -github.com/openziti/transport/v2 v2.0.143 h1:qhqI/yEN4SvP8SBx7ERCt0x67Im+Icy/hGtJ7Dn/xOQ= -github.com/openziti/transport/v2 v2.0.143/go.mod h1:3BxxlWa8fbhmZG1CmIOpeEHlCCY1G7DPx7v7+bAXYEQ= +github.com/openziti/transport/v2 v2.0.144-0.20240903212250-65f868ed70b2 h1:0C8EQYAiRygEE17K0b/AZuIKuh5G41j299kAfuMVKhU= +github.com/openziti/transport/v2 v2.0.144-0.20240903212250-65f868ed70b2/go.mod h1:HtxMLtUusJMrXghLy650CRVodXXs9fjf4QFPZ9yzR64= github.com/openziti/x509-claims v1.0.3 h1:HNdQ8Nf1agB3lBs1gahcO6zfkeS4S5xoQ2/PkY4HRX0= github.com/openziti/x509-claims v1.0.3/go.mod h1:Z0WIpBm6c4ecrpRKrou6Gk2wrLWxJO/+tuUwKh8VewE= github.com/openziti/xweb/v2 v2.1.1 h1:T6vbmG2189WWwq16wryM7RQEbT5wNARrVHNQs23jEPE= @@ -734,7 +737,6 @@ github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYED github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= @@ -759,6 +761,7 @@ github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= +github.com/spf13/cobra v1.2.0/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= @@ -876,7 +879,6 @@ golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190422183909-d864b10871cd/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -886,7 +888,7 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= @@ -1083,7 +1085,6 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200918174421-af09f7315aff/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1373,7 +1374,6 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/zititest/models/dtls/FlowControl.json b/zititest/models/dtls/FlowControl.json new file mode 100644 index 000000000..8d9d2daa7 --- /dev/null +++ b/zititest/models/dtls/FlowControl.json @@ -0,0 +1,3934 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 1, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "circuitId" + ], + "type": "tag" + }, + { + "params": [ + "originator" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "circuit.sendBuffer.windowSize", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "originator", + "operator": "=", + "value": "Initiator" + } + ] + } + ], + "title": "Window Size (Initiator)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "circuitId" + ], + "type": "tag" + }, + { + "params": [ + "originator" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "circuit.sendBuffer.linkSendBufferSize", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "originator", + "operator": "=", + "value": "Initiator" + } + ] + } + ], + "title": "Link Send Buffer Size (initiator)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 11, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "circuitId" + ], + "type": "tag" + }, + { + "params": [ + "originator" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "circuit.sendBuffer.linkRecvBufferSize", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "originator", + "operator": "=", + "value": "Initiator" + } + ] + } + ], + "title": "Link Send Buffer Reported Recv Size (initiator)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 14, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "circuitId" + ], + "type": "tag" + }, + { + "params": [ + "originator" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "circuit.recvBuffer.size", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "originator", + "operator": "=", + "value": "Terminator" + } + ] + } + ], + "title": "Receive Buffer Size (Terminator)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 18 + }, + "id": 9, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "circuitId" + ], + "type": "tag" + }, + { + "params": [ + "originator" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "circuit.sendBuffer.successfulAcks", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "originator", + "operator": "=", + "value": "Initiator" + } + ] + } + ], + "title": "LSB Successful Acks", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 18 + }, + "id": 15, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "circuitId" + ], + "type": "tag" + }, + { + "params": [ + "originator" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "circuit.sendBuffer.duplicateAcks", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "originator", + "operator": "=", + "value": "Initiator" + } + ] + } + ], + "title": "LSB Duplicate Acks", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 23 + }, + "id": 16, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "circuitId" + ], + "type": "tag" + }, + { + "params": [ + "originator" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "circuit.sendBuffer.retransmits", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "originator", + "operator": "=", + "value": "Initiator" + } + ] + } + ], + "title": "LSB Retransmits", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 23 + }, + "id": 17, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "circuitId" + ], + "type": "tag" + }, + { + "params": [ + "originator" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "circuit.sendBuffer.retxThreshold", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "originator", + "operator": "=", + "value": "Initiator" + } + ] + } + ], + "title": "LSB Retx Threshold", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "link.dropped_xg_msgs.non_negative_difference { source: router-east-1 }" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 32 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "xgress.dropped_payloads", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "!=", + "value": "metrics-router" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.dropped_msgs", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "!=", + "value": "metrics-router" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.dropped_fwd_msgs", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "!=", + "value": "metrics-router" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.dropped_rtx_msgs", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "!=", + "value": "metrics-router" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.dropped_xg_msgs", + "orderByTime": "ASC", + "policy": "default", + "refId": "E", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "!=", + "value": "metrics-router" + } + ] + } + ], + "title": "Dropped Payloads", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 32 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "circuitId" + ], + "type": "tag" + }, + { + "params": [ + "originator" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "circuit.sendBuffer.retxScale", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "originator", + "operator": "=", + "value": "Initiator" + } + ] + } + ], + "title": "LSB Retx Scale", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 41 + }, + "id": 26, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.dropped_msgs", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-east-1" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.dropped_fwd_msgs", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-east-1" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.dropped_rtx_msgs", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-east-1" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.dropped_xg_msgs", + "orderByTime": "ASC", + "policy": "default", + "refId": "E", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-east-1" + } + ] + } + ], + "title": "Dropped Link Payloads (Sender)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 41 + }, + "id": 25, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "xgress.dropped_payloads", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-west" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.dropped_msgs", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-west" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.dropped_fwd_msgs", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-west" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.dropped_rtx_msgs", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-west" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.dropped_xg_msgs", + "orderByTime": "ASC", + "policy": "default", + "refId": "E", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "!=", + "value": "metrics-router" + } + ] + } + ], + "title": "Dropped Link Payloads (Recv)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 50 + }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "ingress.rx.bytesrate", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m1_rate" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "!=", + "value": "metrics-router" + } + ] + } + ], + "title": "Ingress Rx", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 50 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "egress.tx.bytesrate", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m1_rate" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "!=", + "value": "metrics-router" + } + ] + } + ], + "title": "Egress Tx", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 59 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "xgress.retransmissions", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "!=", + "value": "metrics-router" + } + ] + } + ], + "title": "Retransmissions", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 59 + }, + "id": 13, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "xgress.ack_duplicates", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "!=", + "value": "metrics-router" + } + ] + } + ], + "title": "Duplicate Acks", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 19, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 68 + }, + "id": 21, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "source" + ], + "type": "tag" + } + ], + "measurement": "circuit.sendBuffer.blockedByLocalWindow", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [] + } + ], + "title": "Blocked (Local)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 19, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 68 + }, + "id": 22, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "source" + ], + "type": "tag" + } + ], + "hide": false, + "measurement": "circuit.sendBuffer.blockedByRemoteWindow", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [] + } + ], + "title": "Blocked (Remote)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 19, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 77 + }, + "id": 20, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "source" + ], + "type": "tag" + } + ], + "measurement": "circuit.sendBuffer.blockedByLocalWindow", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "source" + ], + "type": "tag" + } + ], + "hide": false, + "measurement": "circuit.sendBuffer.blockedByRemoteWindow", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [] + } + ], + "title": "Blocked", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 6, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "link.rx.msgrate.mean { source: router-west }", + "link.tx.msgrate.mean { source: router-east-1 }" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 77 + }, + "id": 24, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "link.rx.msgrate", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m1_rate" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-west" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.tx.msgrate", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m1_rate" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-east-1" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "xgress.retransmissions", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m1_rate" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-east-1" + } + ] + } + ], + "title": "Link TX vs RX", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 86 + }, + "id": 19, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "xgress.payload_duplicates", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "!=", + "value": "metrics-router" + } + ] + } + ], + "title": "Duplicate Payloads", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 86 + }, + "id": 23, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "measurement": "xgress.retransmissions", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-east-1" + } + ] + }, + { + "datasource": { + "type": "influxdb", + "uid": "ddwawc0jfp1q8e" + }, + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "source" + ], + "type": "tag" + }, + { + "params": [ + "none" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "link.tx.msgrate", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "non_negative_difference" + } + ] + ], + "tags": [ + { + "key": "source", + "operator": "=", + "value": "router-east-1" + } + ] + } + ], + "title": "Payloads Vs Rtx", + "type": "timeseries" + } + ], + "refresh": "5s", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "FlowControl", + "uid": "RVzy7lU7z", + "version": 4, + "weekStart": "" +} diff --git a/zititest/models/dtls/configs/router.yml.tmpl b/zititest/models/dtls/configs/router.yml.tmpl index 37b0f9494..b30870644 100644 --- a/zititest/models/dtls/configs/router.yml.tmpl +++ b/zititest/models/dtls/configs/router.yml.tmpl @@ -38,6 +38,8 @@ transport: westworld3: profile_version: 1 #max_segment_sz: 3000 + dtls: + # maxBytesPerSecond: 500000 link: listeners: @@ -51,18 +53,31 @@ link: dialers: - binding: tunnel options: - mtu: 8000 - txPortalStartSize: 4192000 - txPortalIncreaseThresh: 28 + mtu: 1310 + #txPortalStartSize: 4192000 + txPortalIncreaseThresh: 250 + txPortalIncreaseScale: 0.5 + txPortalRetxThresh: 50 + txPortalRetxScale: 0.9 + retxScale: 1.05 + #txPortalMinSize: 4192000 + txPortalIncreaseThresh: 256 listeners: {{if .Component.HasTag "tunneler"}} - binding: tunnel options: mode: tproxy - mtu: 8000 - txPortalStartSize: 4192000 - txPortalIncreaseThresh: 28 + mtu: 1310 + #txPortalStartSize: 4192000 + txPortalIncreaseThresh: 250 + txPortalIncreaseScale: 0.5 + txPortalRetxThresh: 50 + txPortalRetxScale: 0.9 + retxScale: 1.05 + #txPortalMinSize: 4192000 + txPortalIncreaseThresh: 256 + {{end}} - binding: edge address: tls:0.0.0.0:6262 diff --git a/zititest/models/dtls/main.go b/zititest/models/dtls/main.go index f69962380..1e4b185ef 100644 --- a/zititest/models/dtls/main.go +++ b/zititest/models/dtls/main.go @@ -93,6 +93,12 @@ var Model = &model.Model{ return nil }) }), + model.FactoryFunc(func(m *model.Model) error { + return m.ForEachHost("component.edge-router", 1, func(host *model.Host) error { + host.InstanceType = "c5.xlarge" + return nil + }) + }), }, Resources: model.Resources{