Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
21.05% covered (danger)
21.05%
4 / 19
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
OutputFormats
21.05% covered (danger)
21.05%
4 / 19
0.00% covered (danger)
0.00%
0 / 3
82.86
0.00% covered (danger)
0.00%
0 / 1
 getFormatFromString
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 getNewFormatter
28.57% covered (danger)
28.57%
2 / 7
0.00% covered (danger)
0.00%
0 / 1
14.11
 getNewEmitter
33.33% covered (danger)
33.33%
2 / 6
0.00% covered (danger)
0.00%
0 / 1
12.41
1<?php
2/**
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 * http://www.gnu.org/copyleft/gpl.html
17 * @file
18 */
19
20declare( strict_types=1 );
21
22namespace Wikimedia\Stats;
23
24use Wikimedia\Stats\Emitters\EmitterInterface;
25use Wikimedia\Stats\Emitters\NullEmitter;
26use Wikimedia\Stats\Emitters\UDPEmitter;
27use Wikimedia\Stats\Exceptions\UnsupportedFormatException;
28use Wikimedia\Stats\Formatters\DogStatsdFormatter;
29use Wikimedia\Stats\Formatters\FormatterInterface;
30use Wikimedia\Stats\Formatters\NullFormatter;
31use Wikimedia\Stats\Formatters\StatsdFormatter;
32
33/**
34 * Metrics Format and Output Helpers
35 *
36 * @author Cole White
37 * @since 1.41
38 */
39class OutputFormats {
40
41    public const NULL = 1;
42    public const STATSD = 2;
43    public const DOGSTATSD = 3;
44
45    private const SUPPORTED_FORMATS = [
46        'null' => self::NULL,
47        'statsd' => self::STATSD,
48        'dogstatsd' => self::DOGSTATSD
49    ];
50
51    /**
52     * Convert friendly format name to integer.
53     *
54     * @param string $format
55     * @return int
56     */
57    public static function getFormatFromString( string $format ): int {
58        if ( self::SUPPORTED_FORMATS[$format] ?? false ) {
59            return self::SUPPORTED_FORMATS[$format];
60        }
61        throw new UnsupportedFormatException(
62            "Format '" . $format . "' not supported. Expected one of "
63            . json_encode( array_keys( self::SUPPORTED_FORMATS ) )
64        );
65    }
66
67    /**
68     * Returns an instance of the requested formatter.
69     *
70     * @param int $format
71     * @return FormatterInterface
72     */
73    public static function getNewFormatter( int $format ): FormatterInterface {
74        switch ( $format ) {
75            case self::DOGSTATSD:
76                return new DogStatsdFormatter();
77            case self::STATSD:
78                return new StatsdFormatter();
79            case self::NULL:
80                return new NullFormatter();
81            default:
82                throw new UnsupportedFormatException( 'Unsupported metrics format.  Got format: ' . $format );
83        }
84    }
85
86    /**
87     * Returns an emitter instance appropriate the formatter instance.
88     *
89     * @param string $prefix
90     * @param StatsCache $cache
91     * @param FormatterInterface $formatter
92     * @param string|null $target
93     * @return EmitterInterface
94     */
95    public static function getNewEmitter(
96        string $prefix,
97        StatsCache $cache,
98        FormatterInterface $formatter,
99        ?string $target = null
100    ): EmitterInterface {
101        switch ( get_class( $formatter ) ) {
102            case StatsdFormatter::class:
103            case DogStatsdFormatter::class:
104                return new UDPEmitter( $prefix, $cache, $formatter, $target );
105            case NullFormatter::class:
106                return new NullEmitter;
107            default:
108                throw new UnsupportedFormatException(
109                    'Unsupported metrics format.  Got format: ' . get_class( $formatter )
110                );
111        }
112    }
113}