2018-10-12 12:23:21 +00:00
|
|
|
import React, { Component } from 'react';
|
2018-08-30 14:25:33 +00:00
|
|
|
import PropTypes from 'prop-types';
|
2018-10-29 03:26:19 +00:00
|
|
|
import { Trans, withNamespaces } from 'react-i18next';
|
2018-08-30 14:25:33 +00:00
|
|
|
|
|
|
|
import Card from '../ui/Card';
|
2018-10-12 12:23:21 +00:00
|
|
|
import Line from '../ui/Line';
|
2018-08-30 14:25:33 +00:00
|
|
|
|
2019-08-22 13:10:47 +00:00
|
|
|
import { getPercent, normalizeHistory } from '../../helpers/helpers';
|
2018-10-12 12:23:21 +00:00
|
|
|
import { STATUS_COLORS } from '../../helpers/constants';
|
|
|
|
|
|
|
|
class Statistics extends Component {
|
2019-08-22 13:10:47 +00:00
|
|
|
getNormalizedHistory = (data, interval, id) => [{ data: normalizeHistory(data, interval), id }];
|
|
|
|
|
2018-10-12 12:23:21 +00:00
|
|
|
render() {
|
|
|
|
const {
|
2019-08-22 13:10:47 +00:00
|
|
|
interval,
|
2018-10-12 12:23:21 +00:00
|
|
|
dnsQueries,
|
|
|
|
blockedFiltering,
|
|
|
|
replacedSafebrowsing,
|
|
|
|
replacedParental,
|
2019-08-22 13:10:47 +00:00
|
|
|
numDnsQueries,
|
|
|
|
numBlockedFiltering,
|
|
|
|
numReplacedSafebrowsing,
|
|
|
|
numReplacedParental,
|
2018-10-12 12:23:21 +00:00
|
|
|
} = this.props;
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div className="row">
|
|
|
|
<div className="col-sm-6 col-lg-3">
|
2018-11-19 06:57:45 +00:00
|
|
|
<Card type="card--full" bodyType="card-wrap">
|
2018-10-12 12:23:21 +00:00
|
|
|
<div className="card-body-stats">
|
|
|
|
<div className="card-value card-value-stats text-blue">
|
2019-08-22 13:10:47 +00:00
|
|
|
{numDnsQueries}
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
<div className="card-title-stats">
|
2018-11-09 06:51:28 +00:00
|
|
|
<Trans>dns_query</Trans>
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div className="card-chart-bg">
|
2019-08-22 13:10:47 +00:00
|
|
|
<Line
|
|
|
|
data={this.getNormalizedHistory(dnsQueries, interval, 'dnsQueries')}
|
|
|
|
color={STATUS_COLORS.blue}
|
|
|
|
/>
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
</Card>
|
|
|
|
</div>
|
|
|
|
<div className="col-sm-6 col-lg-3">
|
2018-11-19 06:57:45 +00:00
|
|
|
<Card type="card--full" bodyType="card-wrap">
|
2018-10-12 12:23:21 +00:00
|
|
|
<div className="card-body-stats">
|
|
|
|
<div className="card-value card-value-stats text-red">
|
2019-08-22 13:10:47 +00:00
|
|
|
{numBlockedFiltering}
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
<div className="card-value card-value-percent text-red">
|
2019-08-22 13:10:47 +00:00
|
|
|
{getPercent(numDnsQueries, numBlockedFiltering)}
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
<div className="card-title-stats">
|
2018-12-26 08:42:55 +00:00
|
|
|
<a href="#filters">
|
|
|
|
<Trans>blocked_by</Trans>
|
|
|
|
</a>
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div className="card-chart-bg">
|
2019-08-22 13:10:47 +00:00
|
|
|
<Line
|
|
|
|
data={this.getNormalizedHistory(
|
|
|
|
blockedFiltering,
|
|
|
|
interval,
|
|
|
|
'blockedFiltering',
|
|
|
|
)}
|
|
|
|
color={STATUS_COLORS.red}
|
|
|
|
/>
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
</Card>
|
|
|
|
</div>
|
|
|
|
<div className="col-sm-6 col-lg-3">
|
2018-11-19 06:57:45 +00:00
|
|
|
<Card type="card--full" bodyType="card-wrap">
|
2018-10-12 12:23:21 +00:00
|
|
|
<div className="card-body-stats">
|
|
|
|
<div className="card-value card-value-stats text-green">
|
2019-08-22 13:10:47 +00:00
|
|
|
{numReplacedSafebrowsing}
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
<div className="card-value card-value-percent text-green">
|
2019-08-22 13:10:47 +00:00
|
|
|
{getPercent(numDnsQueries, numReplacedSafebrowsing)}
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
<div className="card-title-stats">
|
2018-11-09 06:51:28 +00:00
|
|
|
<Trans>stats_malware_phishing</Trans>
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div className="card-chart-bg">
|
2019-08-22 13:10:47 +00:00
|
|
|
<Line
|
|
|
|
data={this.getNormalizedHistory(
|
|
|
|
replacedSafebrowsing,
|
|
|
|
interval,
|
|
|
|
'replacedSafebrowsing',
|
|
|
|
)}
|
|
|
|
color={STATUS_COLORS.green}
|
|
|
|
/>
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
</Card>
|
|
|
|
</div>
|
|
|
|
<div className="col-sm-6 col-lg-3">
|
2018-11-19 06:57:45 +00:00
|
|
|
<Card type="card--full" bodyType="card-wrap">
|
2018-10-12 12:23:21 +00:00
|
|
|
<div className="card-body-stats">
|
|
|
|
<div className="card-value card-value-stats text-yellow">
|
2019-08-22 13:10:47 +00:00
|
|
|
{numReplacedParental}
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
<div className="card-value card-value-percent text-yellow">
|
2019-08-22 13:10:47 +00:00
|
|
|
{getPercent(numDnsQueries, numReplacedParental)}
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
<div className="card-title-stats">
|
2018-11-09 06:51:28 +00:00
|
|
|
<Trans>stats_adult</Trans>
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div className="card-chart-bg">
|
2019-08-22 13:10:47 +00:00
|
|
|
<Line
|
|
|
|
data={this.getNormalizedHistory(
|
|
|
|
replacedParental,
|
|
|
|
interval,
|
|
|
|
'replacedParental',
|
|
|
|
)}
|
|
|
|
color={STATUS_COLORS.yellow}
|
|
|
|
/>
|
2018-10-12 12:23:21 +00:00
|
|
|
</div>
|
|
|
|
</Card>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
2018-08-30 14:25:33 +00:00
|
|
|
|
|
|
|
Statistics.propTypes = {
|
2019-08-22 13:10:47 +00:00
|
|
|
interval: PropTypes.number.isRequired,
|
|
|
|
dnsQueries: PropTypes.array.isRequired,
|
|
|
|
blockedFiltering: PropTypes.array.isRequired,
|
|
|
|
replacedSafebrowsing: PropTypes.array.isRequired,
|
|
|
|
replacedParental: PropTypes.array.isRequired,
|
|
|
|
numDnsQueries: PropTypes.number.isRequired,
|
|
|
|
numBlockedFiltering: PropTypes.number.isRequired,
|
|
|
|
numReplacedSafebrowsing: PropTypes.number.isRequired,
|
|
|
|
numReplacedParental: PropTypes.number.isRequired,
|
2018-10-12 12:23:21 +00:00
|
|
|
refreshButton: PropTypes.node.isRequired,
|
2018-08-30 14:25:33 +00:00
|
|
|
};
|
|
|
|
|
2018-10-29 03:26:19 +00:00
|
|
|
export default withNamespaces()(Statistics);
|