Skip to content

Commit 8ea8192

Browse files
authored
Add analytics (#8)
* Add analytics * Add analytics for exceptions
1 parent d3a4b6a commit 8ea8192

File tree

2 files changed

+61
-24
lines changed

2 files changed

+61
-24
lines changed

octoprint_netconnectd/__init__.py

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@
1414

1515
import octoprint.plugin
1616
from octoprint.server import admin_permission
17-
18-
19-
17+
from octoprint_netconnectd.analytics import Analytics
2018

2119
class NetconnectdSettingsPlugin(octoprint.plugin.SettingsPlugin,
2220
octoprint.plugin.TemplatePlugin,
@@ -27,8 +25,10 @@ class NetconnectdSettingsPlugin(octoprint.plugin.SettingsPlugin,
2725

2826
def __init__(self):
2927
self.address = None
28+
self._analytics = None
3029

3130
def initialize(self):
31+
self._analytics = Analytics(self)
3232
self.address = self._settings.get(["socket"])
3333
self.forwardUrl = self._settings.get(["forwardUrl"])
3434
self._log_state_timed(self.LOG_STATE_DELAY)
@@ -100,32 +100,41 @@ def on_api_get(self, request):
100100
))
101101

102102
def on_api_command(self, command, data, adminRequired=True):
103-
if command == "refresh_wifi":
104-
return jsonify(self._get_wifi_list(force=True))
105-
106-
# any commands processed after this check require admin permissions
107-
if adminRequired and not admin_permission.can():
108-
return make_response("Insufficient rights", 403)
109-
110-
if command == "configure_wifi":
111-
if data["psk"]:
112-
self._logger.info("Configuring wifi {ssid} and psk...".format(**data))
113-
else:
114-
self._logger.info("Configuring wifi {ssid}...".format(**data))
103+
try:
104+
if command == "refresh_wifi":
105+
self._analytics.write_wifi_config_command(command, success=True)
106+
return jsonify(self._get_wifi_list(force=True))
107+
108+
# any commands processed after this check require admin permissions
109+
if adminRequired and not admin_permission.can():
110+
self._analytics.write_wifi_config_command(command, success=False, err='Insufficient rights')
111+
return make_response("Insufficient rights", 403)
112+
113+
if command == "configure_wifi":
114+
if data["psk"]:
115+
self._logger.info("Configuring wifi {ssid} and psk...".format(**data))
116+
else:
117+
self._logger.info("Configuring wifi {ssid}...".format(**data))
118+
119+
self._configure_and_select_wifi(data["ssid"], data["psk"], force=data["force"] if "force" in data else False)
120+
121+
elif command == "forget_wifi":
122+
self._forget_wifi()
115123

116-
self._configure_and_select_wifi(data["ssid"], data["psk"], force=data["force"] if "force" in data else False)
124+
elif command == "reset":
125+
self._reset()
117126

118-
elif command == "forget_wifi":
119-
self._forget_wifi()
127+
elif command == "start_ap":
128+
self._start_ap()
120129

121-
elif command == "reset":
122-
self._reset()
130+
elif command == "stop_ap":
131+
self._stop_ap()
123132

124-
elif command == "start_ap":
125-
self._start_ap()
133+
self._analytics.write_wifi_config_command(command, success=True)
126134

127-
elif command == "stop_ap":
128-
self._stop_ap()
135+
except RuntimeError as e:
136+
self._analytics.write_wifi_config_command(command, success=False, err=str(e))
137+
raise RuntimeError
129138

130139
##~~ AssetPlugin API
131140

octoprint_netconnectd/analytics.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
class Analytics:
3+
ANALYTICS_DATA = 'MrbAnalyticsData'
4+
EVENT_WIFI_CONFIG = 'wifi_config'
5+
EVENT_WIFI_REFRESH = 'wifi_refresh'
6+
7+
def __init__(self, plugin):
8+
self._plugin = plugin
9+
self._logger = self._plugin._logger
10+
11+
def write_wifi_config_command(self, command, success, err=None):
12+
try:
13+
data = dict(
14+
command=command,
15+
success=success,
16+
err=err,
17+
)
18+
self._send_op_event(eventname=self.EVENT_WIFI_CONFIG, data=data)
19+
except:
20+
self._logger.exception("Exception while writing wifi config command to analytics.")
21+
22+
def _send_op_event(self, eventname, data):
23+
payload = dict(
24+
plugin='netconnectd',
25+
eventname=eventname,
26+
data=data
27+
)
28+
self._plugin._event_bus.fire(self.ANALYTICS_DATA, payload)

0 commit comments

Comments
 (0)