Skip to content

Commit afe1c1e

Browse files
Merge pull request #57781 from nextcloud/bugfix/57766/allow-openmetrics-infoxml
2 parents 955478a + cc6f49b commit afe1c1e

File tree

10 files changed

+64
-18
lines changed

10 files changed

+64
-18
lines changed

lib/private/App/InfoParser.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ public function parse(string $file): ?array {
196196
if (isset($array['dependencies']['backend']) && !is_array($array['dependencies']['backend'])) {
197197
$array['dependencies']['backend'] = [$array['dependencies']['backend']];
198198
}
199+
if (isset($array['openmetrics']['exporter']) && !is_array($array['openmetrics']['exporter'])) {
200+
$array['openmetrics']['exporter'] = [$array['openmetrics']['exporter']];
201+
}
199202

200203
// Ensure some fields are always arrays
201204
if (isset($array['screenshot']) && !is_array($array['screenshot'])) {

lib/private/OpenMetrics/ExporterManager.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,7 @@ public function export(): Generator {
6464
if (!isset($appInfo[self::XML_ENTRY]) || !is_array($appInfo[self::XML_ENTRY])) {
6565
continue;
6666
}
67-
foreach ($appInfo[self::XML_ENTRY] as $classEntries) {
68-
// When multiple exporters are specified, $classEntries will be an array, instead of a string
69-
$classnames = is_array($classEntries) ? $classEntries : [$classEntries];
70-
67+
foreach ($appInfo[self::XML_ENTRY] as $classnames) {
7168
foreach ($classnames as $classname) {
7269
if (isset($this->skippedClasses[$classname])) {
7370
continue;

resources/app-info-shipped.xsd

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@
6767
maxOccurs="1"/>
6868
<xs:element name="collaboration" type="collaboration" minOccurs="0"
6969
maxOccurs="1" />
70+
<xs:element name="openmetrics" type="openmetrics" minOccurs="0"
71+
maxOccurs="1" />
7072
<xs:element name="sabre" type="sabre" minOccurs="0"
7173
maxOccurs="1" />
7274
<xs:element name="public" type="public" minOccurs="0"
@@ -408,16 +410,16 @@
408410

409411
<xs:complexType name="settings">
410412
<xs:sequence>
411-
<xs:element name="admin" minOccurs="0" maxOccurs="unbounded"/>
413+
<xs:element name="admin" minOccurs="0" maxOccurs="unbounded"/>
412414
<xs:element name="admin-section" type="php-class" minOccurs="0"
413415
maxOccurs="unbounded"/>
414416
<xs:element name="personal" type="php-class" minOccurs="0"
415417
maxOccurs="unbounded"/>
416418
<xs:element name="personal-section" type="php-class" minOccurs="0"
417419
maxOccurs="unbounded"/>
418-
<xs:element name="admin-delegation" type="php-class" minOccurs="0"
419-
maxOccurs="unbounded"/>
420-
<xs:element name="admin-delegation-section" type="php-class" minOccurs="0"
420+
<xs:element name="admin-delegation" type="php-class" minOccurs="0"
421+
maxOccurs="unbounded"/>
422+
<xs:element name="admin-delegation-section" type="php-class" minOccurs="0"
421423
maxOccurs="unbounded"/>
422424
</xs:sequence>
423425
</xs:complexType>
@@ -529,6 +531,18 @@
529531
</xs:restriction>
530532
</xs:simpleType>
531533

534+
<xs:complexType name="openmetrics">
535+
<xs:sequence>
536+
<xs:element name="exporter" type="openmetrics-exporter" maxOccurs="unbounded"/>
537+
</xs:sequence>
538+
</xs:complexType>
539+
540+
<xs:complexType name="openmetrics-exporter">
541+
<xs:simpleContent>
542+
<xs:extension base="php-class"/>
543+
</xs:simpleContent>
544+
</xs:complexType>
545+
532546
<xs:complexType name="sabre">
533547
<xs:sequence>
534548
<xs:element name="collections" type="sabre-collections" minOccurs="0" maxOccurs="1"/>

resources/app-info.xsd

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@
6565
maxOccurs="1"/>
6666
<xs:element name="collaboration" type="collaboration" minOccurs="0"
6767
maxOccurs="1" />
68+
<xs:element name="openmetrics" type="openmetrics" minOccurs="0"
69+
maxOccurs="1" />
6870
<xs:element name="sabre" type="sabre" minOccurs="0"
6971
maxOccurs="1" />
7072
<xs:element name="trash" type="trash" minOccurs="0"
@@ -404,16 +406,16 @@
404406

405407
<xs:complexType name="settings">
406408
<xs:sequence>
407-
<xs:element name="admin" minOccurs="0" maxOccurs="unbounded"/>
408-
<xs:element name="admin-section" type="php-class" minOccurs="0"
409+
<xs:element name="admin" minOccurs="0" maxOccurs="unbounded"/>
410+
<xs:element name="admin-section" type="php-class" minOccurs="0"
409411
maxOccurs="unbounded"/>
410412
<xs:element name="personal" type="php-class" minOccurs="0"
411413
maxOccurs="unbounded"/>
412414
<xs:element name="personal-section" type="php-class" minOccurs="0"
413415
maxOccurs="unbounded"/>
414-
<xs:element name="admin-delegation" type="php-class" minOccurs="0"
415-
maxOccurs="unbounded"/>
416-
<xs:element name="admin-delegation-section" type="php-class" minOccurs="0"
416+
<xs:element name="admin-delegation" type="php-class" minOccurs="0"
417+
maxOccurs="unbounded"/>
418+
<xs:element name="admin-delegation-section" type="php-class" minOccurs="0"
417419
maxOccurs="unbounded"/>
418420
</xs:sequence>
419421
</xs:complexType>
@@ -525,6 +527,18 @@
525527
</xs:restriction>
526528
</xs:simpleType>
527529

530+
<xs:complexType name="openmetrics">
531+
<xs:sequence>
532+
<xs:element name="exporter" type="openmetrics-exporter" maxOccurs="unbounded"/>
533+
</xs:sequence>
534+
</xs:complexType>
535+
536+
<xs:complexType name="openmetrics-exporter">
537+
<xs:simpleContent>
538+
<xs:extension base="php-class"/>
539+
</xs:simpleContent>
540+
</xs:complexType>
541+
528542
<xs:complexType name="sabre">
529543
<xs:sequence>
530544
<xs:element name="collections" type="sabre-collections" minOccurs="0" maxOccurs="1"/>

tests/data/app/expected-info.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,5 +91,11 @@
9191
"admin-section": [],
9292
"personal": [],
9393
"personal-section": []
94+
},
95+
"openmetrics": {
96+
"exporter": [
97+
"OC\\OpenMetrics\\Exporters\\ActiveSessions",
98+
"OC\\OpenMetrics\\Exporters\\ActiveUsers"
99+
]
94100
}
95101
}

tests/data/app/valid-info.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,9 @@
3535
<owncloud min-version="7.0.1" max-version="8" />
3636
<backend>caldav</backend>
3737
</dependencies>
38+
39+
<openmetrics>
40+
<exporter>OC\OpenMetrics\Exporters\ActiveSessions</exporter>
41+
<exporter>OC\OpenMetrics\Exporters\ActiveUsers</exporter>
42+
</openmetrics>
3843
</info>

tests/data/app/various-single-item.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,10 @@
4646
"personal-section": []
4747
},
4848
"two-factor-providers": [],
49-
"types": []
49+
"types": [],
50+
"openmetrics": {
51+
"exporter": [
52+
"OC\\OpenMetrics\\Exporters\\ActiveUsers"
53+
]
54+
}
5055
}

tests/data/app/various-single-item.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,8 @@
1919
<dependencies>
2020
<nextcloud min-version="16" max-version="16"/>
2121
</dependencies>
22+
23+
<openmetrics>
24+
<exporter>OC\OpenMetrics\Exporters\ActiveUsers</exporter>
25+
</openmetrics>
2226
</info>

tests/lib/App/InfoParserTest.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ public function testParsingValidXmlWithCache($expectedJson, $xmlFile): void {
4545

4646
public static function providesInfoXml(): array {
4747
return [
48-
['expected-info.json', 'valid-info.xml'],
49-
[null, 'invalid-info.xml'],
5048
['expected-info.json', 'valid-info.xml'],
5149
[null, 'invalid-info.xml'],
5250
['navigation-one-item.json', 'navigation-one-item.xml'],

tests/lib/InfoXmlTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ public function testClasses($app): void {
132132
}
133133
}
134134

135-
if (isset($appInfo['openmetrics'])) {
136-
foreach ($appInfo['openmetrics'] as $class) {
135+
if (isset($appInfo['openmetrics']['exporter'])) {
136+
foreach ($appInfo['openmetrics']['exporter'] as $class) {
137137
$this->assertTrue(class_exists($class), 'Asserting exporter "' . $class . '"exists');
138138
$exporter = Server::get($class);
139139
$this->assertInstanceOf($class, $exporter);

0 commit comments

Comments
 (0)