badguardhome/client/src/components/Dashboard/Statistics.js

143 lines
6.1 KiB
JavaScript
Raw Normal View History

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