async def do_update(self, data): """ Configure Reporting Database settings. If `cpu_in_percentage` is `true`, collectd reports CPU usage in percentage instead of "jiffies". `graphite` specifies a destination hostname or IP for collectd data sent by the Graphite plugin.. `graph_age` specifies the maximum age of stored graphs in months. `graph_points` is the number of points for each hourly, daily, weekly, etc. graph. Changing these requires destroying the current reporting database, so when these fields are changed, an additional `confirm_rrd_destroy: true` flag must be present. .. examples(websocket):: Update reporting settings :::javascript { "id": "6841f242-840a-11e6-a437-00e04d680384", "msg": "method", "method": "reporting.update", "params": [{ "cpu_in_percentage": false, "graphite": "", }] } Recreate reporting database with new settings :::javascript { "id": "6841f242-840a-11e6-a437-00e04d680384", "msg": "method", "method": "reporting.update", "params": [{ "graph_age": 12, "graph_points": 1200, "confirm_rrd_destroy": true, }] } """ confirm_rrd_destroy = data.pop('confirm_rrd_destroy', False) old = await self.config() new = copy.deepcopy(old) new.update(data) verrors = ValidationErrors() destroy_database = False for k in ['graph_age', 'graph_points']: if old[k] != new[k]: destroy_database = True if not confirm_rrd_destroy: verrors.add( f'reporting_update.{k}', _('Changing this option requires destroying the reporting database. This action must be ' 'confirmed by setting confirm_rrd_destroy flag'), ) if verrors: raise verrors await self.middleware.call('datastore.update', self._config.datastore, old['id'], new, {'prefix': self._config.datastore_prefix}) if destroy_database: await self.middleware.call('service.stop', 'collectd') await self.middleware.call('service.stop', 'rrdcached') await run('sh', '-c', 'rm -rfx /var/db/collectd/rrd/*', check=False) await self.middleware.call('reporting.setup') await self.middleware.call('service.start', 'rrdcached') await self.middleware.call('service.restart', 'collectd') return await self.config()
async def do_update(self, data): """ Configure Reporting Database settings. If `cpu_in_percentage` is `true`, collectd reports CPU usage in percentage instead of "jiffies". `graphite` specifies a destination hostname or IP for collectd data sent by the Graphite plugin.. `graph_age` specifies the maximum age of stored graphs in months. `graph_points` is the number of points for each hourly, daily, weekly, etc. graph. Changing these requires destroying the current reporting database, so when these fields are changed, an additional `confirm_rrd_destroy: true` flag must be present. .. examples(websocket):: Update reporting settings :::javascript { "id": "6841f242-840a-11e6-a437-00e04d680384", "msg": "method", "method": "reporting.update", "params": [{ "cpu_in_percentage": false, "graphite": "", }] } Recreate reporting database with new settings :::javascript { "id": "6841f242-840a-11e6-a437-00e04d680384", "msg": "method", "method": "reporting.update", "params": [{ "graph_age": 12, "graph_points": 1200, "confirm_rrd_destroy": true, }] } """ confirm_rrd_destroy = data.pop('confirm_rrd_destroy', False) old = await self.config() new = copy.deepcopy(old) new.update(data) verrors = ValidationErrors() destroy_database = False for k in ['graph_age', 'graph_points']: if old[k] != new[k]: destroy_database = True if not confirm_rrd_destroy: verrors.add( f'reporting_update.{k}', _('Changing this option requires destroying the reporting database. This action must be ' 'confirmed by setting confirm_rrd_destroy flag'), ) if verrors: raise verrors await self.middleware.call( 'datastore.update', self._config.datastore, old['id'], new, {'prefix': self._config.datastore_prefix} ) if destroy_database: await self.middleware.call('service.stop', 'collectd') await self.middleware.call('service.stop', 'rrdcached') await run('sh', '-c', 'rm -rfx /var/db/collectd/rrd/*', check=False) await self.middleware.call('reporting.setup') await self.middleware.call('service.start', 'rrdcached') await self.middleware.call('service.restart', 'collectd') return await self.config()