1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
<?php /** * Contains all event related functionality. * * @since 2.1.0 * * @package StellarWP\Telemetry */
namespace StellarWP\Telemetry\Events;
use StellarWP\Telemetry\Config; use StellarWP\Telemetry\Telemetry\Telemetry;
/** * The class that handles user triggered events. * * @since 2.1.0 * * @package StellarWP\Telemetry */ class Event {
/** * The hook name for sending events asyncronously. * * @since 2.2.0 */ public const AJAX_ACTION = 'stellarwp_telemetry_send_event';
/** * An instance of the Telemetry class. * * @since 2.1.0 * * @var \StellarWP\Telemetry\Telemetry\Telemetry */ private $telemetry;
/** * The class constructor. * * @since 2.1.0 * * @param Telemetry $telemetry An instance of the Telemetry class. */ public function __construct( Telemetry $telemetry ) { $this->telemetry = $telemetry; }
/** * Sends an event to the telemetry server. * * @since 2.1.0 * * @param string $name The name of the event. * @param array $data Additional information to include with the event. * * @return bool */ public function send( string $name, array $data = [] ) { $data = [ 'token' => $this->telemetry->get_token(), 'stellar_slug' => Config::get_stellar_slug(), 'event' => $name, 'event_data' => wp_json_encode( $data ), ];
/** * Provides the ability to filter event data before it is sent to the telemetry server. * * @since 2.1.0 * * @param array $data The data about to be sent. */ $data = apply_filters( 'stellarwp/telemetry/' . Config::get_hook_prefix() . 'event_data', $data );
$response = $this->telemetry->send( $data, $this->get_url() );
if ( ! isset( $response['status'] ) ) { return false; }
return boolval( $response['status'] ); }
/** * Send batched events. * * @since 2.2.0 * * @param array $events An array of stored events to send to the telemetry server. * * @return bool */ public function send_batch( array $events ) { $data = [ 'token' => $this->telemetry->get_token(), 'events' => $events, ];
$response = $this->telemetry->send( $data, $this->get_url() );
if ( ! isset( $response['status'] ) ) { return false; }
return boolval( $response['status'] ); }
/** * Gets the url used for sending events. * * @since 2.1.0 * * @return string */ protected function get_url() { $events_url = Config::get_server_url() . '/events';
/** * Filters the url used to send events to the telemetry server. * * @since 2.1.0 * * @param string $event_url The events endpoint url. */ return apply_filters( 'stellarwp/telemetry/' . Config::get_hook_prefix() . 'events_url', $events_url ); } }
|