vesparny/fair-analytics
vesparny/fair-analytics has 740 GitHub stars and 25 forks. GitHot measured 0 stars in 24 hours, 0 in 7 days, and 0 in 15 days. Last checked 2026-11-09 19:12 UTC. Last push 2018-05-14.
📊 An analytics server that doesn't undermine user's privacy
What you can do
- Fair - It's meant to provide lightweight and anonymous analytics about traffic and usage, not to track behaviors nor geographical locations of users
- Distributed - Raw traffic data is written in an append-only, secure, and distributed log. It uses hypercore under the hood
- Transparent - Raw traffic data is accessible to anyone. This makes it auditable and gives back its ownership to the crowd
- Easy - It's easy to setup
측정된 스타 증가
- in 24h
- 0
- in 7 days
- 0
- in 15 days
- 0
- in 1 month
- 업데이트 지연
서로 겹치는 기간의 순증가량이며 일별 합계가 아닙니다. 측정값이 없으면 비워 둡니다. 스타는 관심도를 나타내며 품질을 보장하지 않습니다.
README.md
OriginalFair Analytics
An analytics server that doesn't undermine user's privacy
Motivations?
Google Analytics is the de-facto standard in the web and mobile analytics service world.
- It's easy to setup and start tracking users behaviors
- It provides advanced reporting features.
But it has several serious privacy implications:
- Most of the time personal data is collected without the explicit consent of the user, hence it undermines user's privacy
- It's closed-source
- It does not embrace transparency at all
- Users cannot access tracked data because data ownership is granted only to the website/app owner (and sadly to Google)
- It targets specific users and data collected is not anonymous
Inspired by an interesting article from @staltz, and from the awesome work done by the micro-analytics team, I decided to start working on a Google Analytics alternative.
What is Fair Analytics
Fair Analytics is an open, transparent, distributed and fair Google Analytics alternative.
Key features
- Fair - It's meant to provide lightweight and anonymous analytics about traffic and usage, not to track behaviors nor geographical locations of users
- Distributed - Raw traffic data is written in an append-only, secure, and distributed log. It uses hypercore under the hood
- Transparent - Raw traffic data is accessible to anyone. This makes it auditable and gives back its ownership to the crowd
- Easy - It's easy to setup
- Flexible - Even though Fair Analytics only stores raw data, it's pretty easy to listen to incoming events, enabling the user to manipulate/aggregate raw data in order to provide graphs or charts. Get fancy if you want to.
Setup
There are 2 ways of running Fair Analytics
CLI
npm install -g fair-analytics
fair-analytics
The command accepts some options:
$ fair-analytics --help
Usage: fair-analytics [options] [command]
Commands:
help Display help
Options:
-h, --help Output usage information
-H, --host [value] Host to listen on (defaults to "0.0.0.0")
-m, --memory Use in-memory storage (disabled by default)
-o, --origin [value] Accepts POST requests only from a specified origin (defaults to "*")
-p, --port <n> Port to listen on (defaults to 3000)
-s, --storage-directory [value] Storage directory (defaults to process.cwd())
-v, --version Output the version number
The instance is now running at http://localhost:3000
Programmatically
Add fair-analytics as a dependency to your project
const path = require('path')
const fa = require('fair-analytics')
const server = fa({
storageDirectory: path.resolve(__dirname)
})
const { feed } = server
feed.on('ready', () => {
server.listen(3000, '0.0.0.0')
})
The instance is now running at http://localhost:3000
Deploy
TODO
- nginx
- docker
Usage
Track events
The quickest way to start tracking usage is to use fair-analytics-client-api
Example usage:
import fairAnalytics from 'fair-analytics-client-api'
// create a fa instance
const fa = fairAnalytics({
url: 'https://fa.yoursite.com' // the URL of your hosted Fair Analytics instance
})
// track events
fa.send({
event: 'pageView', // event is mandatory and can be anything
pathname: window.location.pathname
})
.then(res => {
if (res.ok) {
console.log('success')
}
})
.catch(err => {
console.error(err.message)
})
Please refer to the fair-analytics-client-api documentation for further details
Endpoints
Fair Analytics responds to 3 endpoints:
GET /
Responds with a basic homepage, displaying the feed.key
POST /
Used to POST tracked events.
Responds with 204 in case of success (the body MUST be an object containing at least an event parameter)
GET /_live
Gets realtime updates via server sent events Useful to create real-time dashboards
Consuming real-time data is as easy as:
if (window.EventSource) {
const source = new window.EventSource('https://fa.mysite.com/_live')
source.addEventListener('fair-analytics-event', (e) => {
console.log(e)
})
source.addEventListener('open', () => {
console.log('Connection was opened')
})
source.addEventListener('error', e => {
if (e.readyState === window.EventSource.CLOSED) {
console.log('Connection was closed')
}
})
}
GET /_stats
Provides an aggregated view of all the events stored, grouped by event and pathname
In this case data is persisted to a local JSON file using lowdb
Here is an example response:
{
"pageView":{
"/home":{
"times":640,
"last":"2017-05-04T12:36:31.514Z"
},
"/about":{
"times":40,
"last":"2017-05-04T12:36:31.514Z"
}
}
}
Replicate raw data
As we said Fair Analytics is distributed. It's easily possible to replicate raw data.
const hypercore = require('hypercore')
const swarm = require('hyperdiscovery')
const KEY = 'A FAIR ANALYTICS FEEED KEY'
const LOCALPATH = './replicated.dataset'
const feed = hypercore(LOCALPATH, KEY, {valueEncoding: 'json'})
swarm(feed)
feed.on('ready', () => {
// this configuration will download all the feed
// and process new incoming data
// via the feed.on('data') callback
// in case you want to process all the feed (old and new)
// use only {tail: true, tail: true}
feed.createReadStream({
tail: true,
live: true,
start: feed.length,
snapshot: false
})
.on('data', console.log) // Use this callback to precess data as you like
})
Tests
$ npm test
Change Log
This project adheres to Semantic Versioning.
Every release, along with the migration instructions, is documented in the CHANGELOG.md file.
License
MIT
관련 프로젝트 살펴보기
Asabeneh/30-Days-Of-Python
30 Days of Python 프로그래밍 챌린지는 Python 프로그래밍 언어를 30일 동안 배우기 위한 단계별 가이드입니다. 이 챌린지는 100일 이상 걸릴 수 있습니다. 자신의 속도에 맞춰 진행하세요. 다음 동영상도 도움이 될 수 있습니다: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,486 스타grafana/grafana
개방적이고 조합 가능한 옵저버빌리티 및 데이터 시각화 플랫폼입니다. Prometheus, Loki, Elasticsearch, InfluxDB, Postgres 등 여러 소스의 메트릭, 로그, 트레이스를 시각화합니다.
77,790 스타redis/redis
실시간 데이터 기반 애플리케이션을 구축하는 개발자에게 Redis는 가장 선호되고, 가장 빠르며, 기능이 가장 풍부한 캐시, 데이터 구조 서버이자 문서 및 벡터 쿼리 엔진입니다.
77,332 스타apache/superset
Apache Superset는 데이터 시각화 및 데이터 탐색 플랫폼입니다.
75,455 스타