diff --git a/.circleci/scripts/structure-settings.xml b/.circleci/scripts/structure-settings.xml index 4f2fe23c93db..fc7cd290b9c7 100644 --- a/.circleci/scripts/structure-settings.xml +++ b/.circleci/scripts/structure-settings.xml @@ -10,6 +10,10 @@ opennms-repo OpenNMS Mega-Repository https://maven.opennms.org/repository/everything/ + + true + never + false @@ -18,6 +22,10 @@ central Maven Central https://repo1.maven.org/maven2/ + + true + never + false @@ -28,6 +36,10 @@ opennms-repo OpenNMS Mega-Repository https://maven.opennms.org/repository/everything/ + + true + never + false @@ -36,6 +48,10 @@ central Maven Central https://repo1.maven.org/maven2/ + + true + never + false diff --git a/core/web-assets/package-lock.json b/core/web-assets/package-lock.json index 38ad8225e6e8..e6d73e7c1d46 100644 --- a/core/web-assets/package-lock.json +++ b/core/web-assets/package-lock.json @@ -4003,15 +4003,15 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz", - "integrity": "sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==", + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz", + "integrity": "sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/type-utils": "5.60.0", - "@typescript-eslint/utils": "5.60.0", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/type-utils": "5.60.1", + "@typescript-eslint/utils": "5.60.1", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -4036,6 +4036,53 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", + "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", + "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", + "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -4053,6 +4100,18 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4093,14 +4152,14 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.0.tgz", - "integrity": "sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==", + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.1.tgz", + "integrity": "sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/typescript-estree": "5.60.0", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/typescript-estree": "5.60.1", "debug": "^4.3.4" }, "engines": { @@ -4119,38 +4178,28 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", + "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", "dev": true, "dependencies": { - "ms": "2.1.2" + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1" }, "engines": { - "node": ">=6.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz", - "integrity": "sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", + "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/visitor-keys": "5.60.0" - }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4159,15 +4208,18 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz", - "integrity": "sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", + "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.60.0", - "@typescript-eslint/utils": "5.60.0", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1", "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -4177,16 +4229,30 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "*" - }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", + "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", @@ -4203,16 +4269,88 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/ms": { + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/@typescript-eslint/types": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz", - "integrity": "sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==", + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz", + "integrity": "sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.60.1", + "@typescript-eslint/utils": "5.60.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", + "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4222,14 +4360,14 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz", - "integrity": "sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", + "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/visitor-keys": "5.60.0", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4249,7 +4387,24 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", + "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", @@ -4266,7 +4421,19 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", @@ -4278,16 +4445,16 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "node_modules/@typescript-eslint/type-utils/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -4299,24 +4466,24 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "node_modules/@typescript-eslint/type-utils/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.0.tgz", - "integrity": "sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==", + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz", + "integrity": "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/typescript-estree": "5.60.0", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/typescript-estree": "5.60.1", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -4331,46 +4498,70 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", + "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", + "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "bin": { - "semver": "bin/semver.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", + "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz", - "integrity": "sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", + "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/types": "5.60.1", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4381,7 +4572,24 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "node_modules/@typescript-eslint/utils/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", @@ -4393,6 +4601,45 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@uirouter/core": { "version": "6.0.8", "resolved": "https://registry.npmjs.org/@uirouter/core/-/core-6.0.8.tgz", @@ -20964,9 +21211,9 @@ "dev": true }, "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.5.tgz", + "integrity": "sha512-FOH+WN/DQjUvN6WgW+c4Ml3yi0PH+a/8q+kNIfRehv1wLhWONedw85iu+vQ39Wp49IzTJEsZ2lyLXpBF7mkF1g==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -25161,15 +25408,15 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz", - "integrity": "sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==", + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz", + "integrity": "sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/type-utils": "5.60.0", - "@typescript-eslint/utils": "5.60.0", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/type-utils": "5.60.1", + "@typescript-eslint/utils": "5.60.1", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -25178,6 +25425,32 @@ "tsutils": "^3.21.0" }, "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", + "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1" + } + }, + "@typescript-eslint/types": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", + "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", + "dev": true + }, + "@typescript-eslint/visitor-keys": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", + "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.1", + "eslint-visitor-keys": "^3.3.0" + } + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -25187,6 +25460,12 @@ "ms": "2.1.2" } }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -25220,56 +25499,58 @@ } }, "@typescript-eslint/parser": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.0.tgz", - "integrity": "sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==", + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.1.tgz", + "integrity": "sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/typescript-estree": "5.60.0", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/typescript-estree": "5.60.1", "debug": "^4.3.4" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "@typescript-eslint/scope-manager": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", + "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", "dev": true, "requires": { - "ms": "2.1.2" + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "@typescript-eslint/types": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", + "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz", - "integrity": "sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/visitor-keys": "5.60.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz", - "integrity": "sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.60.0", - "@typescript-eslint/utils": "5.60.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "dependencies": { + }, + "@typescript-eslint/typescript-estree": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", + "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", + "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.1", + "eslint-visitor-keys": "^3.3.0" + } + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -25279,35 +25560,87 @@ "ms": "2.1.2" } }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true + }, + "semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, - "@typescript-eslint/types": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz", - "integrity": "sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz", - "integrity": "sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==", + "@typescript-eslint/type-utils": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz", + "integrity": "sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/visitor-keys": "5.60.0", + "@typescript-eslint/typescript-estree": "5.60.1", + "@typescript-eslint/utils": "5.60.1", "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", "tsutils": "^3.21.0" }, "dependencies": { + "@typescript-eslint/types": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", + "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", + "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", + "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.1", + "eslint-visitor-keys": "^3.3.0" + } + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -25317,6 +25650,12 @@ "ms": "2.1.2" } }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -25333,9 +25672,9 @@ "dev": true }, "semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -25350,21 +25689,77 @@ } }, "@typescript-eslint/utils": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.0.tgz", - "integrity": "sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==", + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz", + "integrity": "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/typescript-estree": "5.60.0", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/typescript-estree": "5.60.1", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", + "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1" + } + }, + "@typescript-eslint/types": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", + "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", + "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", + "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.1", + "eslint-visitor-keys": "^3.3.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -25374,10 +25769,16 @@ "yallist": "^4.0.0" } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -25391,24 +25792,6 @@ } } }, - "@typescript-eslint/visitor-keys": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz", - "integrity": "sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.60.0", - "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true - } - } - }, "@uirouter/core": { "version": "6.0.8", "resolved": "https://registry.npmjs.org/@uirouter/core/-/core-6.0.8.tgz", @@ -38467,9 +38850,9 @@ "dev": true }, "typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.5.tgz", + "integrity": "sha512-FOH+WN/DQjUvN6WgW+c4Ml3yi0PH+a/8q+kNIfRehv1wLhWONedw85iu+vQ39Wp49IzTJEsZ2lyLXpBF7mkF1g==", "dev": true }, "ui-bootstrap4": { diff --git a/debian/get-build-args.sh b/debian/get-build-args.sh index 83d8fc95ae05..5baf7e1e6b85 100755 --- a/debian/get-build-args.sh +++ b/debian/get-build-args.sh @@ -9,9 +9,9 @@ if [ -f "$OPENNMS_SETTINGS_XML" ]; then fi if [ -z "$OPENNMS_ENABLE_SNAPSHOTS" ] || [ "$OPENNMS_ENABLE_SNAPSHOTS" = 1 ]; then - ARGS+=(-Denable.snapshots=true -DupdatePolicy=always) + ARGS+=(-Denable.snapshots=true) else - ARGS+=(-Denable.snapshots=false -DupdatePolicy=never) + ARGS+=(-Denable.snapshots=false) fi case "${CIRCLE_BRANCH}" in diff --git a/dependencies/jasper/pom.xml b/dependencies/jasper/pom.xml index f0c2cd8359e8..6ed9b71612d3 100644 --- a/dependencies/jasper/pom.xml +++ b/dependencies/jasper/pom.xml @@ -113,6 +113,13 @@ jaspersoft-third-party https://maven.opennms.org/repository/thirdparty/ + + true + never + + + false + diff --git a/dependencies/oia/pom.xml b/dependencies/oia/pom.xml index 233671c900cd..086385ee0c3a 100644 --- a/dependencies/oia/pom.xml +++ b/dependencies/oia/pom.xml @@ -59,6 +59,7 @@ true + ${updatePolicy} diff --git a/docs/modules/deployment/pages/minion/docker/minion.adoc b/docs/modules/deployment/pages/minion/docker/minion.adoc index 1822bcdfb919..458728a02d6a 100644 --- a/docs/modules/deployment/pages/minion/docker/minion.adoc +++ b/docs/modules/deployment/pages/minion/docker/minion.adoc @@ -28,7 +28,7 @@ services: command: ["-c"] volumes: - ./minion-config.yaml:/opt/minion/minion-config.yaml<5> - - ./scv.jce:/opt/minion/scv.jce<6> + #- ./keystore/scv.jce:/opt/minion/scv.jce<6> healthcheck: test: "/health.sh"<7> interval: 30s @@ -45,6 +45,7 @@ services: <4> Optional. Use to control the maximum Java heap size. <5> Configuration file for connectivity and features <6> Keystore file with encrypted credentials for authenticating broker endpoints. +Initially this line should be commented out, and will need to be activated after the file has been created on the local system. <7> Run our health check to indicate the Minion is ready. It uses the `opennms:health-check` internally running in Karaf. <8> Publish ports for Syslog, SNMP trap listener, and the SSH access to the Karaf shell. @@ -88,10 +89,24 @@ netmgt: TIP: To run with Apache Kafka or configure flow listeners, see the configuration reference in the link:https://github.com/OpenNMS/opennms/blob/master/opennms-container/minion/CONFD_README.md[Confd readme]. +Next, we need to create the keystore file and add the credentials for connecting to the core {page-component-title} server. + .Initialize the keystore with credentials [source, console] ---- -docker-compose run -v $(pwd):/keystore minion -s +mkdir keystore +chmod 10001:10001 keystore<1> +docker-compose run -v $(pwd)/keystore:/keystore minion -s<2> +---- +<1> Assign permissions so the container user account can write within the directory. +<2> When prompted, enter the username and password for a `ROLE_MINOIN` user account on the {page-component-title} server. +You may be prompted for the same username and password twice. + +.Edit the `docker-compose.yml` file to uncomment the keystore file +[source, diff] +---- +- #- ./keystore/scv.jce:/opt/minion/scv.jce ++ - ./keystore/scv.jce:/opt/minion/scv.jce ---- .Validate your Docker Compose file diff --git a/docs/modules/deployment/pages/sentinel/introduction.adoc b/docs/modules/deployment/pages/sentinel/introduction.adoc index 386329c55ef3..3996c3346322 100644 --- a/docs/modules/deployment/pages/sentinel/introduction.adoc +++ b/docs/modules/deployment/pages/sentinel/introduction.adoc @@ -1,17 +1,11 @@ = Sentinel -Sentinel provides scalability for data processing, including flows and streaming telemetry. +Sentinel provides scalability for data processing of flows and streaming telemetry received by one or more Minions. It also supports thresholding for streaming telemetry if you are using OpenNMS xref:deployment:time-series-storage/newts/introduction.adoc#ga-opennms-operation-newts[Newts]. -If you are using Minions or looking for scalable flow processing, you need Sentinel. +If you need to scale processing capacity for flow and/or streaming telemetry, you need Sentinel. -Sentinel is a Karaf container that handles data processing for OpenNMS and Minion, spawning new containers as necessary to deal with increased data volume. +As your flow and streaming telemetry volumes increase, additional Sentinel instances can be deployed to meet your processing needs. -This section describes how to install the Sentinel to scale individual components. +In most cases, you can disable adapters and listeners in {page-component-title} that are also run by a Sentinel instance. -Keep the following in mind when using Sentinel: - -* Use only for distribution of Telemetryd functionality (such as processing flows, or use the existing telemetry adapters to store measurements data to OpenNMS Newts). -* Requires a Minion to work as a (message) producer. -* In most cases, you should disable adapters and listeners in {page-component-title} that are also run by a Sentinel instance. - -NOTE: At the moment Sentinel can distribute only flows. +This section describes how to install Sentinel components. diff --git a/docs/modules/deployment/pages/sentinel/runtime/install.adoc b/docs/modules/deployment/pages/sentinel/runtime/install.adoc index dccedd82d602..792ba64eb91f 100644 --- a/docs/modules/deployment/pages/sentinel/runtime/install.adoc +++ b/docs/modules/deployment/pages/sentinel/runtime/install.adoc @@ -13,13 +13,14 @@ * Linux physical server or a virtual machine running a supported Linux operating system * Internet access to download the installation packages -* Ensure DNS is configured, localhost and your servers host name is resolved properly +* Ensure DNS is configured so that `localhost` and your server's host name are resolved properly * {page-component-title} Core instance runs on latest stable release -* Java installed {compatible-javajdk} -* System user with administrative permissions (sudo) to perform the installation tasks +* Java {compatible-javajdk} is installed +* System user with administrative permissions (`sudo`) to perform the installation tasks ifeval::["{page-component-title}" == "Horizon"] -NOTE: If you run Debian, you have to install and configure `sudo` yourself. - A guide can be found in the link:https://wiki.debian.org/sudo/[Debian Wiki]. ++ +NOTE: If you run Debian, you may have to install and configure `sudo` yourself. +See https://wiki.debian.org/sudo/[Debian Wiki] for guidance. endif::[] include::../../time-sync.adoc[] @@ -67,7 +68,7 @@ IMPORTANT: Change the default user/password _admin/admin_ for the Karaf shell an [{tabs}] ==== -CentOS/RHEL 7/8:: +CentOS/RHEL 7/8/9:: + -- include::centos-rhel/secure-karaf.adoc[] @@ -83,13 +84,13 @@ endif::[] ==== TIP: Password or encryption algorithm changes happen immediately. - It is not required to restart the Sentinel +It is not required to restart the Sentinel. TIP: By default the Karaf Shell is restricted to 127.0.0.1. - If you want enable remote access, set `sshHost=0.0.0.0` in `org.apache.karaf.shell.cfg`. - The change is applied immediately and a Sentinel restart is not required. - If you have a firewall running on your host, allow `8301/tcp` to grant access to the Karaf Shell. +If you want enable remote access, set `sshHost=0.0.0.0` in `org.apache.karaf.shell.cfg`. +The change is applied immediately and a Sentinel restart is not required. +If you have a firewall running on your host, allow `8301/tcp` to grant access to the Karaf Shell. == Set up flow processing -To set up flow processing with Sentinel, see xref:operation:deep-dive/flows/sentinel/sentinel.adoc#flows-scaling[scale flows data]. \ No newline at end of file +Once you have Sentinel installed, see xref:operation:deep-dive/flows/sentinel/sentinel.adoc#flows-scaling[scale flows data] to setup flow processing. diff --git a/docs/modules/operation/pages/deep-dive/flows/aggregation.adoc b/docs/modules/operation/pages/deep-dive/flows/aggregation.adoc index 116e8eb8398d..bd88d28ad973 100644 --- a/docs/modules/operation/pages/deep-dive/flows/aggregation.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/aggregation.adoc @@ -5,7 +5,7 @@ The flow query engine supports rendering the top _N_ metrics from pre-aggregated You can use these statistics to help alleviate computation load on the Elasticsearch cluster, particularly in environments with large volumes of flows (more than 10,000 per second). To use this functionality, you must <> and set up the streaming analytics tool to process flows and persist aggregates in Elasticsearch. -Set the following properties in `$OPENNMS_HOME/etc/org.opennms.features.flows.persistence.elastic.cfg` to control the query engine to use aggregated flows: +Set the following properties in `$\{OPENNMS_HOME}/etc/org.opennms.features.flows.persistence.elastic.cfg` to control the query engine to use aggregated flows: [options="autowidth"] |=== diff --git a/docs/modules/operation/pages/deep-dive/flows/basic.adoc b/docs/modules/operation/pages/deep-dive/flows/basic.adoc index 2fb397f75033..c38a82ff6518 100644 --- a/docs/modules/operation/pages/deep-dive/flows/basic.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/basic.adoc @@ -57,14 +57,23 @@ elasticIndexStrategy=daily ** See <> for a complete set of configuration options. -== Enable protocols +== Multi-protocol listener -Follow these steps to enable one or more of the protocols that you want to handle. +With most tools, if you are monitoring multiple flow protocols, you must set up a listener on its own UDP port for each protocol. +However, {page-component-title} allows a multi-port listener option; this listener, named `Multi-UDP-9999`, is enabled by default and monitors multiple protocols on a single UDP port (`9999`). +The default configuration includes support for Netflow v5, Netflow v9, sFlow, and IPFIX. +You can edit `$\{OPENNMS_HOME}/etc/telemetryd-configuration.xml` to change the port number and add or remove protocols. + +IMPORTANT: Make sure your firewall allow list includes the ports that you have configured to receive flow data. + +== Enable individual protocols + +Follow these steps to enable one or more protocols that you want to handle individually or that are not included in the default multi-protocol listener. NOTE: This example uses the NetFlow v5 protocol. You can follow the same steps for any of the other flow-related protocols. -. Edit or create `$\{OPENNMS_HOME}/etc/telemetryd-configuration.xml` to enable protocols: +. Edit `$\{OPENNMS_HOME}/etc/telemetryd-configuration.xml` to enable protocols: + [source, xml] ---- @@ -79,21 +88,16 @@ You can follow the same steps for any of the other flow-related protocols. ---- ++ +NOTE: The default configuration file provides example configurations for many protocols. +To enable one of these protocols, find the correct example `listener` and `adapter` elements and change their `enabled` attributes to `true`. -. Reload the daemons to apply your changes: +. Reload the daemon to apply your changes: + [source, console] ${OPENNMS_HOME}/bin/send-event.pl -p 'daemonName Telemetryd' uei.opennms.org/internal/reloadDaemonConfig -This configuration opens a UDP socket bound to `0.0.0.0:8877`; NetFlow v5 messages are forwarded to this socket (see <> for more information). - -=== Multi-port listener - -Normally, if you are monitoring multiple flow protocols, you must set up a listener on its own UDP port for each protocol. -By default, {page-component-title} allows a multi-port listener option; this monitors multiple protocols on a single UDP port (`9999`). -You can edit `$\{OPENNMS_HOME}/etc/telemetryd-configuration.xml` to change the port number and add or remove protocols. - -IMPORTANT: Make sure your firewall allow list includes the ports that you have configured to receive flow data. +This configuration opens a UDP socket bound to `0.0.0.0:8877` to listen and process NetFlow v5 messages that are are forwarded to this port. == Enable flows on your devices @@ -163,10 +167,9 @@ admin@opennms()> config:update After you set up basic flows monitoring, you may want to do some of the following tasks: * Classify data flows. -+ {page-component-title} resolves flows to application names. You can create rules to override the default classifications (see xref:deep-dive/flows/classification-engine.adoc[]). -* xref:deep-dive/flows/distributed.adoc[Enable remote flows data collection]. -* xref:deep-dive/flows/sentinel/sentinel.adoc[Scale to manage large volumes of flows data]. +* xref:deep-dive/flows/distributed.adoc[Enable remote flows data collection] with Minions. +* xref:deep-dive/flows/sentinel/sentinel.adoc[Scale to manage large volumes of flows data] with Sentinels. * Add https://github.com/OpenNMS/nephron[OpenNMS Nephron] for aggregation and streaming analytics. diff --git a/docs/modules/operation/pages/deep-dive/flows/classification-engine.adoc b/docs/modules/operation/pages/deep-dive/flows/classification-engine.adoc index 51e22882ed77..fa09b76e261f 100644 --- a/docs/modules/operation/pages/deep-dive/flows/classification-engine.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/classification-engine.adoc @@ -2,8 +2,8 @@ [[ga-flow-support-classification-engine]] = Flows Classification -For improved flows management, OpenNMS uses a classification engine that applies user- and/or pre-defined rules to filter and classify flows. -(Pre-defined rules are inspired by the https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml[IANA Service Name and Transport Protocol Port Number Registry].) +For improved flows management, {page-component-title} uses a classification engine that applies predefined and user-defined rules to filter and classify flows. +The included predefined rules are based on the https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml[IANA Service Name and Transport Protocol Port Number Registry]. You can group flows by a combination of parameters: source/destination port, source/destination address, IP protocol, and exporter filter. Once set up, you can view classification groups on the home page. @@ -66,7 +66,7 @@ Assume that you define the following rules: {page-component-title} receives the following flows, classified according to the rules defined above: [options="header"] -[cols="1,3"] +[cols="3,1"] |=== | Flow | Classification @@ -243,4 +243,4 @@ An example of an evaluation: | group 3 | 2 | rule 3.2 -|=== \ No newline at end of file +|=== diff --git a/docs/modules/operation/pages/deep-dive/flows/data-collection.adoc b/docs/modules/operation/pages/deep-dive/flows/data-collection.adoc index 8e7ec1fa42a1..a5c2ce2dbe2b 100644 --- a/docs/modules/operation/pages/deep-dive/flows/data-collection.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/data-collection.adoc @@ -1,5 +1,5 @@ [[ga-flow-support-data-collection]] -= Data collection of flow applications += Data Collection of Flow Applications Flows are categorized in applications using the <>. OpenNMS supports summing up the bytesIn/bytesOut data of flow records based on these flow applications and the collection of this data. diff --git a/docs/modules/operation/pages/deep-dive/flows/distributed.adoc b/docs/modules/operation/pages/deep-dive/flows/distributed.adoc index b9d6a67f3a8a..6ecedc6e1159 100644 --- a/docs/modules/operation/pages/deep-dive/flows/distributed.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/distributed.adoc @@ -1,6 +1,6 @@ [[flows-remote]] -= Using Minions as a flow collector += Using Minions as a Flow Collector Beyond a basic flows setup, you may want to add a Minion to collect flows data from hard-to-reach or remote locations. @@ -21,7 +21,7 @@ Make sure you do the following: This example enables a generic listener for the NetFlow v5 protocol on Minion. IMPORTANT: NetFlow v5 uses the generic UDP listener, but other protocols require a specific listener. -See the examples in `$OPENNMS_HOME/etc/telemetryd-configuration.xml`, or <> for details. +See the examples in `$\{OPENNMS_HOME}/etc/telemetryd-configuration.xml`, or <> for details. To enable and configure a listener for NetFlow v5 on Minion, connect to the Karaf Console and set the following properties: @@ -36,7 +36,7 @@ config:property-set parsers.0.class-name org.opennms.netmgt.telemetry.protocols. config:update ---- -TIP: If using a configuration management, you can create and use the properties file as startup configuration in `$MINION_HOME/etc/org.opennms.features.telemetry.listeners-udp-8877.cfg`. +TIP: If using a configuration management, you can create and use the properties file as startup configuration in `$\{MINION_HOME}/etc/org.opennms.features.telemetry.listeners-udp-8877.cfg`. [source, properties] ---- @@ -75,4 +75,4 @@ The value the lookup uses corresponds to the following fields from each protocol | BMP | bgpId -|=== \ No newline at end of file +|=== diff --git a/docs/modules/operation/pages/deep-dive/flows/sentinel/ipfix.adoc b/docs/modules/operation/pages/deep-dive/flows/sentinel/ipfix.adoc index 6a670dcc4bc8..1fb8bc97a3e2 100644 --- a/docs/modules/operation/pages/deep-dive/flows/sentinel/ipfix.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/sentinel/ipfix.adoc @@ -1,20 +1,20 @@ [source, karaf] ---- -config:edit --alias ipfix --factory org.opennms.features.telemetry.listeners +config:edit --alias ipfix --factory org.opennms.features.telemetry.adapters config:property-set name IPFIX<1> config:property-set adapters.0.name IPFIX-Adapter<2> config:property-set adapters.0.class-name org.opennms.netmgt.telemetry.protocols.netflow.adapter.ipfix.IpfixAdapter<3> config:update ---- - <1> Queue name from which Sentinel will fetch messages. +The Minion parser name for IPFIX must match this name. By default, for {page-component-title} components, the queue name convention is `IPFIX`. <2> Set a name for the IPFIX adapter. <3> Assign an adapter to enrich IPFIX messages. The configuration is persisted with the suffix specified as alias in `etc/org.opennms.features.telemetry.adapters-ipfix.cfg`. -TIP: To process multiple protocols, increase the index `0` in the adapters name and class name accordingly for additional protocols. +TIP: When processing multiple protocols from the same queue, include additional adapters by adding additional `name` and `class-name` properties, increasing the index `0` for each pair. .Run health-check to verify adapter configuration [source, karaf] @@ -30,4 +30,3 @@ Verifying the health of the container ... Verifying Adapter IPFIX-Adapter (org.opennms.netmgt.telemetry.protocols.netflow.adapter.ipfix.IpfixAdapter) [ Success ] ---- - diff --git a/docs/modules/operation/pages/deep-dive/flows/sentinel/message-broker/activemq.adoc b/docs/modules/operation/pages/deep-dive/flows/sentinel/message-broker/activemq.adoc index 1565ffa12110..68b535017a4e 100644 --- a/docs/modules/operation/pages/deep-dive/flows/sentinel/message-broker/activemq.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/sentinel/message-broker/activemq.adoc @@ -25,24 +25,21 @@ ssh -p 8301 admin@localhost config:edit org.opennms.sentinel.controller config:property-set location SENTINEL<1> config:property-set id 00000000-0000-0000-0000-000000ddba11<2> -config:property-set http-url http://core-instance-ip:8980/opennms<3> -config:property-set broker-url failover:tcp://my-activemq-ip:61616<4> +config:property-set broker-url failover:tcp://my-activemq-ip:61616<3> config:update ---- - -<1> A location string is used to assign the Sentinel to a monitoring location in your environment that has Minions. -<2> Unique identifier used as a node label for monitoring the Sentinel instance within {page-component-title}. -<3> URL that points to your core {page-component-title} instance. -<4> URL that points to ActiveMQ broker. +<1> A location string is used to assign the Sentinel to a monitoring location. +This can be an existing location or a new location and does not impact the messages that this Sentinel will process. +<2> Unique identifier you define to use as a node label for monitoring the Sentinel instance within {page-component-title}. +This can be a GUID or a hostname. +<3> URL that points to ActiveMQ broker. .Configure the credentials and exit Karaf shell [source, karaf] ---- -opennms:scv-set opennms.http my-sentinel-user my-sentinel-password<1> -opennms:scv-set opennms.broker my-sentinel-user my-sentinel-password<2> +opennms:scv-set opennms.broker my-sentinel-user my-sentinel-password<1> ---- -<1> Set the credentials for the REST endpoint created in your {page-component-title} Core instance -<2> Set the credentials for the ActiveMQ message broker +<1> Set the credentials for the ActiveMQ message broker NOTE: The credentials are encrypted on disk in `$\{SENTINEL_HOME}/etc/scv.jce`. @@ -69,7 +66,6 @@ Verifying installed bundles [ Success ] Retrieving NodeDao [ Success ] Connecting to JMS Broker [ Success ] Connecting to ElasticSearch ReST API (Flows) [ Success ] -Connecting to OpenNMS ReST API [ Success ] => Everything is awesome ---- diff --git a/docs/modules/operation/pages/deep-dive/flows/sentinel/message-broker/kafka.adoc b/docs/modules/operation/pages/deep-dive/flows/sentinel/message-broker/kafka.adoc index 55474db9d879..8da5a56422e3 100644 --- a/docs/modules/operation/pages/deep-dive/flows/sentinel/message-broker/kafka.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/sentinel/message-broker/kafka.adoc @@ -13,6 +13,18 @@ sentinel-kafka sentinel-flows ---- +.(Optional) Configure a custom topic prefix +[source, console] +---- +sudo vi etc/custom.system.properties +---- + +[source, custom.system.properties] +---- +org.opennms.instance.id=OpenNMS<1> +---- +<1> Replace `OpenNMS` with the same topic prefix that the target instance of {page-component-title} Core uses. + .Connect to the Karaf shell via SSH [source, console] ---- @@ -25,47 +37,37 @@ ssh -p 8301 admin@localhost config:edit org.opennms.sentinel.controller config:property-set location SENTINEL<1> config:property-set id 00000000-0000-0000-0000-000000ddba11<2> -config:property-set http-url http://core-instance-ip:8980/opennms<3> config:update ---- - -<1> A location string is used to assign the Sentinel to a monitoring location in your environment that has Minions. -<2> Unique identifier used as a node label for monitoring the Sentinel instance within {page-component-title}. -<3> URL that points to your core {page-component-title} instance. +<1> A location string is used to assign the Sentinel to a monitoring location. +This can be an existing location or a new location and does not impact the messages that this Sentinel will process. +<2> Unique identifier you define to use as a node label for monitoring the Sentinel instance within {page-component-title}. +This can be a GUID or a hostname. .Configure Sentinel as Kafka consumer for flow messages [source, karaf] ---- config:edit org.opennms.core.ipc.sink.kafka.consumer<1> config:property-set bootstrap.servers my-kafka-ip-1:9092,my-kafka-ip-2:9092<2> +config:property-set group.id OpenNMS<3> config:update ---- - <1> Edit the configuration for the flow consumer from Kafka. <2> Connect to the following Kafka nodes and adjust the IPs or FQDNs with the Kafka port (9092) accordingly. +<3> (Optional) When using the same Kafka cluster for multiple {page-component-title} instances, the `group.id` value should be the same as the `org.opennms.instance.id` value in the `etc/custom.system.properties` file. -.Configure Sentinel to generate and send events -[source, karaf] ----- -config:edit org.opennms.core.ipc.sink.kafka<1> -config:property-set bootstrap.servers my-kafka-ip-1:9092,my-kafka-ip-2:9092<2> -config:update ----- +TIP: The complete set of configuration properties needed for your cluster depends on your Kafka deployment. +Refer to the Kafka configuration that {page-component-title} Core and Minions use, as the properties required for those components will likely be similar to the properties needed in the Sentinel's configuration. -<1> Edit the configuration to send generated events from Sentinel via Kafka. -<2> Connect to the following Kafka nodes and adjust the IPs or FQDNs with the Kafka port (9092) accordingly. - -TIP: To use a Kafka cluster with multiple {page-component-title} instances, customize the topic prefix by setting `group.id`, which is by default set to `OpenNMS`. - You can set a different topic prefix for each instance with `config:edit group.id my-group-id` for the consumer and sink. -.Configure the credentials and exit Karaf shell +.Configure Sentinel to generate and send events (sink) using the same set of properties from the previous step [source, karaf] ---- -opennms:scv-set opennms.http my-sentinel-user my-sentinel-password<1> +config:edit org.opennms.core.ipc.sink.kafka +config:property-set bootstrap.servers my-kafka-ip-1:9092,my-kafka-ip-2:9092 +config:property-set group.id OpenNMS +config:update ---- -<1> Set the credentials for the REST endpoint created in your {page-component-title} Core instance. - -The credentials are encrypted on disk in `$\{SENTINEL_HOME}/etc/scv.jce`. Exit the Karaf Shell with kbd:[Ctrl+d] @@ -91,7 +93,6 @@ Connecting to Kafka from Sink Producer [ Success ] Connecting to Kafka from Sink Consumer [ Success ] Retrieving NodeDao [ Success ] Connecting to ElasticSearch ReST API (Flows) [ Success ] -Connecting to OpenNMS ReST API [ Success ] => Everything is awesome ---- diff --git a/docs/modules/operation/pages/deep-dive/flows/sentinel/netflow5.adoc b/docs/modules/operation/pages/deep-dive/flows/sentinel/netflow5.adoc index ccb62846ed85..03145fd2d519 100644 --- a/docs/modules/operation/pages/deep-dive/flows/sentinel/netflow5.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/sentinel/netflow5.adoc @@ -6,15 +6,14 @@ config:property-set adapters.0.name Netflow-5-Adapter<2> config:property-set adapters.0.class-name org.opennms.netmgt.telemetry.protocols.netflow.adapter.netflow5.Netflow5Adapter<3> config:update ---- - -<1> Queue name from which Sentinel will fetch messages. -By default for {page-component-title} components, the queue name convention is `Netflow-5`. +<1> Queue name from which Sentinel will fetch messages. The Minion parser name for Netflow v5 must match this name. +By default, for {page-component-title} components, the queue name convention is `Netflow-5`. <2> Set a name for the Netflow v5 adapter. <3> Assign an adapter to enrich Netflow v5 messages. The configuration is persisted with the suffix specified as alias in `etc/org.opennms.features.telemetry.adapters-netflow5.cfg`. -TIP: To process multiple protocols, increase the index `0` in the adapters name and class name accordingly for additional protocols. +TIP: When processing multiple protocols from the same queue, include additional adapters by adding additional `name` and `class-name` properties, increasing the index `0` for each pair. .Run health-check to verify adapter configuration [source, karaf] diff --git a/docs/modules/operation/pages/deep-dive/flows/sentinel/netflow9.adoc b/docs/modules/operation/pages/deep-dive/flows/sentinel/netflow9.adoc index 88dcf122cbba..8d3ee4551ab4 100644 --- a/docs/modules/operation/pages/deep-dive/flows/sentinel/netflow9.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/sentinel/netflow9.adoc @@ -6,15 +6,15 @@ config:property-set adapters.0.name Netflow-9-Adapter<2> config:property-set adapters.0.class-name org.opennms.netmgt.telemetry.protocols.netflow.adapter.netflow9.Netflow9Adapter<3> config:update ---- - <1> Queue name from which Sentinel will fetch messages. -By default for {page-component-title} components, the queue name convention is `Netflow-9`. +The Minion parser name for Netflow v9 must match this name. +By default, for {page-component-title} components, the queue name convention is `Netflow-9`. <2> Set a name for the Netflow v9 adapter. <3> Assign an adapter to enrich Netflow v9 messages. The configuration is persisted with the suffix specified as alias in `etc/org.opennms.features.telemetry.adapters-netflow9.cfg`. -TIP: To process multiple protocols, increase the index `0` in the adapters name and class name accordingly for additional protocols. +TIP: When processing multiple protocols from the same queue, include additional adapters by adding additional `name` and `class-name` properties, increasing the index `0` for each pair. .Run health-check to verify adapter configuration [source, karaf] @@ -30,4 +30,3 @@ Verifying the health of the container ... Verifying Adapter Netflow-9-Adapter (org.opennms.netmgt.telemetry.protocols.netflow.adapter.netflow9.Netflow9Adapter) [ Success ] ---- - diff --git a/docs/modules/operation/pages/deep-dive/flows/sentinel/sentinel.adoc b/docs/modules/operation/pages/deep-dive/flows/sentinel/sentinel.adoc index a1361b560474..dea00734fc31 100644 --- a/docs/modules/operation/pages/deep-dive/flows/sentinel/sentinel.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/sentinel/sentinel.adoc @@ -2,11 +2,11 @@ [[flows-scaling]] = Scale Flow Processing with Sentinel -When your flows data collection volume increases to the point that {page-component-title} is too busy processing flows, you can add Sentinel(s) to do the processing instead. +When your flows data collection volume increases to the point that {page-component-title} is too busy processing flows, you can add one or more Sentinels to do the processing instead. Sentinel can do the following: -* Persist network flow messages with Sentinel to Elasticsearch * Consume flow messages from Minions through a message broker (ActiveMQ or Apache Kafka) +* Persist network flow messages to Elasticsearch * Generate and send events to the {page-component-title} core instance via message broker .Flow integration with Sentinel @@ -18,12 +18,14 @@ Make sure you have the following: * xref:operation:deep-dive/flows/basic.adoc#flows-basic[Basic flows environment] set up * xref:deployment:sentinel/runtime/install.adoc#install-sentinel[Sentinel installed] on your system -* PostgreSQL, Elasticsearch, and REST endpoint to {page-component-title} core instance running and reachable from the Sentinel node -* Message broker (ActiveMQ or Apache Kafka) running and reachable from the Sentinel node -* Credentials for authentication configured for the REST endpoint in the {page-component-title} core instance, message broker, Elasticsearch, and the PostgreSQL database +* PostgreSQL, Elasticsearch, and REST endpoint to {page-component-title} core instance running and reachable from the Sentinel node(s) +* Message broker (ActiveMQ or Apache Kafka) running and reachable from the Sentinel node(s) +* Credentials for authentication configured for the message broker, Elasticsearch, and the PostgreSQL database -NOTE: You must set configuration in the `etc` directory relative to the {page-component-title} Sentinel home directory. - Depending on your operating system, the home directory is `/usr/share/sentinel` for Debian/Ubuntu or `/opt/sentinel` for CentOS/RHEL. +NOTE: You must set configuration in the `etc` directory relative to the {page-component-title} Sentinel home directory `$\{SENTINEL_HOME}`. +Depending on your operating system, the home directory is `/usr/share/sentinel` for Debian/Ubuntu or `/opt/sentinel` for CentOS/RHEL. + +Repeat the following steps on each Sentinel node. == Configure access to PostgreSQL database @@ -68,14 +70,17 @@ config:property-set connTimeout 30000<4> config:property-set readTimeout 60000<5> config:update ---- - -<1> Add the URL to the Elasticsearch cluster. -<2> Select an index strategy. +<1> Replace with a URL to the Elasticsearch cluster. +<2> Specify an index strategy. <3> Set number of replicas; 0 is a default. In production you should have at least 1. <4> Timeout, in milliseconds, Sentinel waits to connect to the Elasticsearch cluster. <5> Read timeout when data is fetched from the Elasticsearch cluster. +Additional configuration properties are documented in <>. +Be sure to also set the `indexPrefix` property when using a single Elasticsearch cluster with multiple {page-component-title} instances. +If you set the `indexPrefix` property, all Sentinel instances on the same {page-component-title} instance should use the same value. + == Set up message broker [{tabs}] diff --git a/docs/modules/operation/pages/deep-dive/flows/sentinel/sflow.adoc b/docs/modules/operation/pages/deep-dive/flows/sentinel/sflow.adoc index ef2710472cc4..d2061372522a 100644 --- a/docs/modules/operation/pages/deep-dive/flows/sentinel/sflow.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/sentinel/sflow.adoc @@ -1,20 +1,20 @@ [source, karaf] ---- -config:edit --alias sflow --factory org.opennms.features.telemetry.listeners +config:edit --alias sflow --factory org.opennms.features.telemetry.adapters config:property-set name SFlow<1> config:property-set adapters.0.name SFlow-Adapter<2> config:property-set adapters.0.class-name org.opennms.netmgt.telemetry.protocols.sflow.adapter.SFlowAdapter<3> config:update ---- - <1> Queue name from which Sentinel will fetch messages. -By default for {page-component-title} components, the queue name convention is `SFlow`. +The Minion parser name for sFlow must match this name. +By default, for {page-component-title} components, the queue name convention is `SFlow`. <2> Set a name for the sFlow adapter. <3> Assign an adapter to enrich sFlow messages. The configuration is persisted with the suffix specified as alias in `etc/org.opennms.features.telemetry.adapters-sflow.cfg`. -TIP: To process multiple protocols, increase the index `0` in the adapters name and class name accordingly for additional protocols. +TIP: When processing multiple protocols from the same queue, include additional adapters by adding additional `name` and `class-name` properties, increasing the index `0` for each pair. .Run health-check to verify adapter configuration [source, karaf] diff --git a/docs/modules/operation/pages/deep-dive/flows/thresholding.adoc b/docs/modules/operation/pages/deep-dive/flows/thresholding.adoc index 75cf75b49b6c..0a08924ac0ad 100644 --- a/docs/modules/operation/pages/deep-dive/flows/thresholding.adoc +++ b/docs/modules/operation/pages/deep-dive/flows/thresholding.adoc @@ -1,5 +1,5 @@ [[ga-flow-support-thresholding]] -= Thresholding flow applications += Thresholding Flow Applications Flows are categorized in applications using the <>. OpenNMS supports summing up the bytesIn/bytesOut data of flow records based on these flow applications. @@ -75,7 +75,7 @@ The following example defines thresholds for HTTPS traffic exceeding 4096000 byt ---- [[ga-flow-support-thresholding-properties]] -The properties for the step-size and the idle timeout can be specified in the file `$OPENNMS_HOME/etc/org.opennms.features.flows.persistence.elastic.cfg`. +Specify the properties for the step size and the idle timeout in the file `$\{OPENNMS_HOME}/etc/org.opennms.features.flows.persistence.elastic.cfg`. You can set the following properties: [options="header, autowidth" cols="1,3,2"] @@ -92,4 +92,4 @@ You can set the following properties: | Timeout for cleaning up idle sessions. | 900000 -|=== \ No newline at end of file +|=== diff --git a/docs/modules/reference/pages/configuration/sentinel-features.adoc b/docs/modules/reference/pages/configuration/sentinel-features.adoc index 4ef9ffc6b534..510459defd12 100644 --- a/docs/modules/reference/pages/configuration/sentinel-features.adoc +++ b/docs/modules/reference/pages/configuration/sentinel-features.adoc @@ -1,4 +1,4 @@ -= Sentinel features += Sentinel Features The following list contains some features which may be installed manually: diff --git a/docs/modules/reference/pages/service-assurance/introduction.adoc b/docs/modules/reference/pages/service-assurance/introduction.adoc index 87951f5fabd1..6059bd1b7597 100644 --- a/docs/modules/reference/pages/service-assurance/introduction.adoc +++ b/docs/modules/reference/pages/service-assurance/introduction.adoc @@ -54,6 +54,10 @@ These minimum configuration parameters are available in all monitors and describ | Base directory of an RRD repository in which to store this service monitor's response-time samples. | null +| rrd-status +| Enable xref:operation:deep-dive/service-assurance/polling-packages.adoc#service-status-persistence[service status persistence] +| false + | thresholding-enabled | Whether collected response time should be tested against thresholds. | false @@ -124,4 +128,3 @@ Note that all service definitions must include the `monitor` section. <1> ---- <1> Required *monitor* section. - diff --git a/docs/modules/reference/pages/service-assurance/monitors/DskTableMonitoradoc b/docs/modules/reference/pages/service-assurance/monitors/DskTableMonitor.adoc similarity index 100% rename from docs/modules/reference/pages/service-assurance/monitors/DskTableMonitoradoc rename to docs/modules/reference/pages/service-assurance/monitors/DskTableMonitor.adoc diff --git a/docs/modules/releasenotes/pages/changelog.adoc b/docs/modules/releasenotes/pages/changelog.adoc index 3a004fac964e..2a296608f4ab 100644 --- a/docs/modules/releasenotes/pages/changelog.adoc +++ b/docs/modules/releasenotes/pages/changelog.adoc @@ -72,7 +72,7 @@ The codename for Horizon 32.0.0 is https://volt.fm/genre/3379/cavernous-death-me * Karaf SSH locks up if connections are terminated improperly (Issue https://issues.opennms.org/browse/NMS-15714[NMS-15714]) * Vue menubar logo link should go to 'homeUrl' (Issue https://issues.opennms.org/browse/NMS-15721[NMS-15721]) * https redirection is partially broken (Issue https://issues.opennms.org/browse/NMS-15732[NMS-15732]) -* Startup taking > 10 minutes on fresh 32.0.0-SNAPSHOT builds (Issue https://issues.opennms.org/browse/NMS-15751[NMS-15751]) +* Startup taking > 10 minutes on fresh 32.0.1-SNAPSHOT builds (Issue https://issues.opennms.org/browse/NMS-15751[NMS-15751]) * Docs need updating to include support for Kafka 3 (Issue https://issues.opennms.org/browse/NMS-15777[NMS-15777]) * Add /usr/lib64/jvm to find-java.sh search paths (Issue https://issues.opennms.org/browse/NMS-15784[NMS-15784]) diff --git a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/StringIntervalAdapter.java b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/StringIntervalAdapter.java index 1a253707b5a4..fba2348f959b 100644 --- a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/StringIntervalAdapter.java +++ b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/StringIntervalAdapter.java @@ -57,10 +57,16 @@ public String marshal(final Duration v) { /** {@inheritDoc} */ @Override public Duration unmarshal(final String v) { - if ("0".equals(v)) { + if (v == null) { + return null; + } + if ("0".equals(v.trim())) { return Duration.ZERO; } - return DEFAULT_PERIOD_FORMATTER.parsePeriod(v).toStandardDuration(); + if ("-1".equals(v.trim())) { + return Duration.ZERO.minus(1000); + } + return DEFAULT_PERIOD_FORMATTER.parsePeriod(v.trim()).toStandardDuration(); } } diff --git a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/StringIntervalPropertyEditor.java b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/StringIntervalPropertyEditor.java index 7f29a5da3861..eaf68801b075 100644 --- a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/StringIntervalPropertyEditor.java +++ b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/StringIntervalPropertyEditor.java @@ -39,10 +39,18 @@ public class StringIntervalPropertyEditor extends PropertyEditorSupport implemen /** {@inheritDoc} */ @Override public void setAsText(final String text) throws IllegalArgumentException { - if ("0".equals(text)) { - setValue(Duration.ZERO); + if (text == null) { + setValue(null); } else { - setValue(StringIntervalAdapter.DEFAULT_PERIOD_FORMATTER.parsePeriod(text).toStandardDuration()); + if ("0".equals(text.trim())) { + setValue(Duration.ZERO); + } else { + if ("-1".equals(text.trim())) { + setValue(Duration.ZERO.minus(1000)); + } else { + setValue(StringIntervalAdapter.DEFAULT_PERIOD_FORMATTER.parsePeriod(text.trim()).toStandardDuration()); + } + } } } diff --git a/opennms-provision/opennms-provision-persistence/src/test/java/org/opennms/netmgt/provision/persist/StringIntervalAdapterTest.java b/opennms-provision/opennms-provision-persistence/src/test/java/org/opennms/netmgt/provision/persist/StringIntervalAdapterTest.java new file mode 100644 index 000000000000..0da873d9c753 --- /dev/null +++ b/opennms-provision/opennms-provision-persistence/src/test/java/org/opennms/netmgt/provision/persist/StringIntervalAdapterTest.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * This file is part of OpenNMS(R). + * + * Copyright (C) 2023 The OpenNMS Group, Inc. + * OpenNMS(R) is Copyright (C) 1999-2023 The OpenNMS Group, Inc. + * + * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. + * + * OpenNMS(R) is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * OpenNMS(R) is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with OpenNMS(R). If not, see: + * http://www.gnu.org/licenses/ + * + * For more information contact: + * OpenNMS(R) Licensing + * http://www.opennms.org/ + * http://www.opennms.com/ + *******************************************************************************/ + +package org.opennms.netmgt.provision.persist; + +import static org.junit.Assert.assertEquals; + +import org.joda.time.Duration; +import org.junit.Test; + +public class StringIntervalAdapterTest { + final StringIntervalAdapter stringIntervalAdapter = new StringIntervalAdapter(); + final static long ONE_DAY_MS = 1000 * 3600 * 24; + final static long ONE_SECOND_MS = 1000; + + @Test + public void marshalTest() { + assertEquals("0", stringIntervalAdapter.marshal(Duration.ZERO)); + assertEquals("-1s", stringIntervalAdapter.marshal(Duration.ZERO.minus(ONE_SECOND_MS))); + assertEquals("1d", stringIntervalAdapter.marshal(Duration.ZERO.plus(ONE_DAY_MS))); + } + + @Test + public void unmarshalTest() { + assertEquals(Duration.ZERO, stringIntervalAdapter.unmarshal("0")); + assertEquals(Duration.ZERO, stringIntervalAdapter.unmarshal(" 0 ")); + assertEquals(Duration.ZERO.minus(ONE_SECOND_MS), stringIntervalAdapter.unmarshal("-1s")); + assertEquals(Duration.ZERO.minus(ONE_SECOND_MS), stringIntervalAdapter.unmarshal(" -1s ")); + assertEquals(Duration.ZERO.plus(ONE_DAY_MS), stringIntervalAdapter.unmarshal("1d")); + assertEquals(Duration.ZERO.plus(ONE_DAY_MS), stringIntervalAdapter.unmarshal(" 1d ")); + // see NMS-15768 + assertEquals(Duration.ZERO.minus(ONE_SECOND_MS), stringIntervalAdapter.unmarshal("-1")); + assertEquals(Duration.ZERO.minus(ONE_SECOND_MS), stringIntervalAdapter.unmarshal(" -1 ")); + } +} diff --git a/pom.xml b/pom.xml index 587b09c3e672..ca2b150aee92 100644 --- a/pom.xml +++ b/pom.xml @@ -1574,6 +1574,7 @@ false + interval:480 ${user.home}/.m2/clover.license 2.9.0 @@ -1614,7 +1615,7 @@ 3.5 0.9.5.5 3.2.1 - 5.4.0 + 5.5.0 3.5.5 3.3.2 1.1.0 @@ -1856,12 +1857,13 @@ - + opennms-ossrh https://oss.sonatype.org/content/repositories/snapshots - false + true + never false @@ -1957,8 +1959,13 @@ central Maven Central https://repo1.maven.org/maven2/ + + true + never + true + ${updatePolicy} @@ -1970,6 +1977,7 @@ true + ${updatePolicy} @@ -1980,6 +1988,7 @@ true + ${updatePolicy} @@ -1991,8 +2000,13 @@ central Maven Central https://repo1.maven.org/maven2/ + + true + never + true + ${updatePolicy} @@ -2004,6 +2018,7 @@ true + ${updatePolicy} diff --git a/smoke-test/pom.xml b/smoke-test/pom.xml index 641218658049..4e70b9fbca0e 100644 --- a/smoke-test/pom.xml +++ b/smoke-test/pom.xml @@ -994,6 +994,10 @@ central Maven Central https://repo1.maven.org/maven2/ + + true + never + false @@ -1002,6 +1006,10 @@ opennms-repo OpenNMS Mega-Repository https://maven.opennms.org/repository/everything/ + + true + never + false diff --git a/tools/packages/minion/create-minion-assembly.sh b/tools/packages/minion/create-minion-assembly.sh index 40cb4dbcfe7a..f17e86992f1f 100755 --- a/tools/packages/minion/create-minion-assembly.sh +++ b/tools/packages/minion/create-minion-assembly.sh @@ -8,7 +8,6 @@ export OPTS_ASSEMBLIES="-Passemblies" export OPTS_PROFILES="-Prun-expensive-tasks" OPTS_ENABLE_SNAPSHOTS="" -OPTS_UPDATE_POLICY="-DupdatePolicy=never" OPTS_PRODUCTION="" TOPDIR="$(pwd)" @@ -34,7 +33,6 @@ do ;; s) OPTS_ENABLE_SNAPSHOTS="-Denable.snapshots=true" - OPTS_UPDATE_POLICY="-DupdatePolicy=always" ;; c) SKIP_COMPILE=1 @@ -54,7 +52,15 @@ esac # always build the root POM, just to be sure inherited properties/plugin/dependencies are right echo "=== Building root POM ===" -"${TOPDIR}/compile.pl" $OPTS_SKIP_TESTS $OPTS_SKIP_TARBALL $OPTS_ENABLE_SNAPSHOTS $OPTS_UPDATE_POLICY $OPTS_PRODUCTION --projects org.opennms:opennms install --builder smart --threads ${CCI_MAXCPU:-2} +"${TOPDIR}/compile.pl" \ + $OPTS_SKIP_TESTS \ + $OPTS_SKIP_TARBALL \ + $OPTS_ENABLE_SNAPSHOTS \ + $OPTS_PRODUCTION \ + --projects org.opennms:opennms \ + --builder smart \ + --threads ${CCI_MAXCPU:-2} \ + install COMPILE="./compile.pl" @@ -69,12 +75,21 @@ else fi echo "" -"${COMPILE}" $OPTS_MAVEN $OPTS_SKIP_TESTS $OPTS_SKIP_TARBALL $OPTS_ENABLE_SNAPSHOTS $OPTS_UPDATE_POLICY $OPTS_PROFILES $OPTS_PRODUCTION $OPTS_ASSEMBLIES \ +"${COMPILE}" \ + $OPTS_MAVEN \ + $OPTS_SKIP_TESTS \ + $OPTS_SKIP_TARBALL \ + $OPTS_ENABLE_SNAPSHOTS \ + $OPTS_PROFILES \ + $OPTS_PRODUCTION \ + $OPTS_ASSEMBLIES \ -DvaadinJavaMaxMemory=${CCI_VAADINJAVAMAXMEM:-1g} \ -DmaxCpus=${CCI_MAXCPU:-2} \ --projects "org.opennms.assemblies:org.opennms.assemblies.minion" \ --also-make \ - install --builder smart --threads ${CCI_MAXCPU:-2} + --builder smart \ + --threads ${CCI_MAXCPU:-2} \ + install echo "=== Finished ===" echo "Your tarball is in:" opennms-assemblies/minion/target/org.opennms.assemblies.minion-*-minion.tar.gz diff --git a/tools/packages/opennms/opennms.spec b/tools/packages/opennms/opennms.spec index 229606caaf42..ccfe959523bd 100644 --- a/tools/packages/opennms/opennms.spec +++ b/tools/packages/opennms/opennms.spec @@ -463,10 +463,8 @@ if [ -e "settings.xml" ]; then export OPTS_SETTINGS_XML="-s `pwd`/settings.xml" fi -OPTS_UPDATE_POLICY="-DupdatePolicy=never" if [ "%{enable_snapshots}" = 1 ]; then OPTS_ENABLE_SNAPSHOTS="-Denable.snapshots=true" - OPTS_UPDATE_POLICY="-DupdatePolicy=always" fi OPTS_PRODUCTION="" diff --git a/tools/packages/sentinel/create-sentinel-assembly.sh b/tools/packages/sentinel/create-sentinel-assembly.sh index a8e56c56ef69..4635d6d6d86f 100755 --- a/tools/packages/sentinel/create-sentinel-assembly.sh +++ b/tools/packages/sentinel/create-sentinel-assembly.sh @@ -8,7 +8,6 @@ export OPTS_ASSEMBLIES="-Passemblies" export OPTS_PROFILES="-Prun-expensive-tasks" OPTS_ENABLE_SNAPSHOTS="" -OPTS_UPDATE_POLICY="-DupdatePolicy=never" OPTS_PRODUCTION="" TOPDIR="$(pwd)" @@ -34,7 +33,6 @@ do ;; s) OPTS_ENABLE_SNAPSHOTS="-Denable.snapshots=true" - OPTS_UPDATE_POLICY="-DupdatePolicy=always" ;; c) SKIP_COMPILE=1 @@ -54,7 +52,15 @@ esac # always build the root POM, just to be sure inherited properties/plugin/dependencies are right echo "=== Building root POM ===" -"${TOPDIR}/compile.pl" $OPTS_SKIP_TESTS $OPTS_SKIP_TARBALL $OPTS_ENABLE_SNAPSHOTS $OPTS_UPDATE_POLICY $OPTS_PRODUCTION --projects org.opennms:opennms install --builder smart --threads ${CCI_MAXCPU:-2} +"${TOPDIR}/compile.pl" \ + $OPTS_SKIP_TESTS \ + $OPTS_SKIP_TARBALL \ + $OPTS_ENABLE_SNAPSHOTS \ + $OPTS_PRODUCTION \ + --projects org.opennms:opennms \ + --builder smart \ + --threads ${CCI_MAXCPU:-2} \ + install COMPILE="./compile.pl" @@ -68,12 +74,21 @@ else fi echo "" -"$COMPILE" $OPTS_MAVEN $OPTS_SKIP_TESTS $OPTS_SKIP_TARBALL $OPTS_ENABLE_SNAPSHOTS $OPTS_UPDATE_POLICY $OPTS_PROFILES $OPTS_PRODUCTION $OPTS_ASSEMBLIES \ +"$COMPILE" \ + $OPTS_MAVEN \ + $OPTS_SKIP_TESTS \ + $OPTS_SKIP_TARBALL \ + $OPTS_ENABLE_SNAPSHOTS \ + $OPTS_PROFILES \ + $OPTS_PRODUCTION \ + $OPTS_ASSEMBLIES \ -DvaadinJavaMaxMemory=${CCI_VAADINJAVAMAXMEM:-1g} \ -DmaxCpus=${CCI_MAXCPU:-2} \ --projects "org.opennms.assemblies:org.opennms.assemblies.sentinel" \ --also-make \ - install --builder smart --threads ${CCI_MAXCPU:-2} + --builder smart \ + --threads ${CCI_MAXCPU:-2} \ + install echo "=== Finished ===" echo "Your tarball is in:" opennms-assemblies/sentinel/target/org.opennms.assemblies.sentinel-*-sentinel.tar.gz