Opensource Site Tracking Wiki
Self-hosted private analytics for real-time multi-site tracking.
Brought to you by:
autobotsolution
This comprehensive guide covers various integration methods for the Open Source Site Tracking platform, enabling you to incorporate analytics into your existing systems and workflows.
The Open Source Site Tracking platform offers multiple integration options:
<!-- Add to your website's <head> section -->
<script src="https://your-domain.com/tracking.js" data-project-id="your-project-id"></script>
// Initialize with custom configuration
SiteTracking.init({
projectId: 'your-project-id',
apiEndpoint: 'https://your-domain.com/api',
tracking: {
pageViews: true,
clicks: true,
scrolls: true,
forms: true,
customEvents: true
},
privacy: {
respectDoNotTrack: true,
anonymizeIp: true,
cookieConsent: true
},
performance: {
sampleRate: 1.0,
batchSize: 10,
flushInterval: 5000
}
});
// Track custom events
SiteTracking.track('button-click', {
buttonId: 'signup-button',
page: '/landing-page',
userSegment: 'new-user'
});
// Track form submissions
SiteTracking.track('form-submit', {
formId: 'contact-form',
fields: ['name', 'email', 'message'],
success: true
});
// Track user interactions
SiteTracking.track('feature-use', {
feature: 'advanced-search',
action: 'filter-applied',
filters: ['date-range', 'category']
});
// Track product views
SiteTracking.track('product-view', {
productId: 'prod-123',
productName: 'Analytics Pro',
category: 'software',
price: 99.99,
currency: 'USD'
});
// Track purchases
SiteTracking.track('purchase', {
orderId: 'order-456',
products: [
{
productId: 'prod-123',
quantity: 1,
price: 99.99
}
],
total: 99.99,
currency: 'USD'
});
import requests
# API authentication
headers = {
'Authorization': 'Bearer your-api-token',
'Content-Type': 'application/json'
}
# Base URL
base_url = 'https://your-domain.com/api/v1'
# Create new project
project_data = {
'name': 'My Project',
'description': 'Project description',
'repository_url': 'https://github.com/user/repo',
'tracking_domain': 'mydomain.com'
}
response = requests.post(
f'{base_url}/projects',
headers=headers,
json=project_data
)
project = response.json()
project_id = project['id']
# Get analytics overview
response = requests.get(
f'{base_url}/analytics/{project_id}/overview',
headers=headers,
params={
'start_date': '2024-01-01',
'end_date': '2024-01-31',
'metrics': ['page_views', 'unique_visitors', 'bounce_rate']
}
)
analytics = response.json()
# Track events from server
event_data = {
'event_type': 'server_action',
'properties': {
'action': 'user_login',
'user_id': 'user-123',
'timestamp': '2024-01-15T10:30:00Z'
}
}
response = requests.post(
f'{base_url}/events/{project_id}',
headers=headers,
json=event_data
)
# Configure webhooks
webhook_config = {
'url': 'https://your-app.com/webhooks/analytics',
'events': [
'page_view',
'user_signup',
'conversion',
'error'
],
'secret': 'your-webhook-secret',
'active': True
}
response = requests.post(
f'{base_url}/webhooks/{project_id}',
headers=headers,
json=webhook_config
)
from flask import Flask, request, jsonify
import hmac
import hashlib
app = Flask(__name__)
@app.route('/webhooks/analytics', methods=['POST'])
def handle_analytics_webhook():
# Verify webhook signature
signature = request.headers.get('X-Signature')
payload = request.data
expected_signature = hmac.new(
'your-webhook-secret'.encode(),
payload,
hashlib.sha256
).hexdigest()
if not hmac.compare_digest(signature, expected_signature):
return jsonify({'error': 'Invalid signature'}), 401
# Process webhook data
event = request.json
if event['event_type'] == 'user_signup':
handle_user_signup(event)
elif event['event_type'] == 'conversion':
handle_conversion(event)
return jsonify({'status': 'success'})
def handle_user_signup(event):
# Process user signup event
user_data = event['properties']
# Add user to CRM, send welcome email, etc.
def handle_conversion(event):
# Process conversion event
conversion_data = event['properties']
# Update analytics, notify team, etc.
// Send data to Google Analytics
SiteTracking.on('track', function(event) {
if (window.gtag) {
gtag('event', event.type, {
'event_category': 'Site Tracking',
'event_label': event.properties.action,
'value': event.properties.value
});
}
});
// Send data to Segment
SiteTracking.on('track', function(event) {
if (window.analytics) {
analytics.track(event.type, event.properties);
}
});
// Send data to Mixpanel
SiteTracking.on('track', function(event) {
if (window.mixpanel) {
mixpanel.track(event.type, event.properties);
}
});
# Sync data with HubSpot
import hubspot
def sync_to_hubspot(event_data):
client = hubspot.Client.create(access_token='your-hubspot-token')
if event_data['event_type'] == 'user_signup':
# Create or update contact
contact_data = {
'properties': [
{'property': 'email', 'value': event_data['properties']['email']},
{'property': 'source', 'value': 'site-tracking'}
]
}
client.crm.contacts.basic_api.create(contact_data)
// React component integration
import { useEffect } from 'react';
import SiteTracking from 'site-tracking-sdk';
function AnalyticsProvider({ children, projectId }) {
useEffect(() => {
SiteTracking.init({
projectId: projectId,
tracking: {
pageViews: true,
clicks: true
}
});
}, [projectId]);
return children;
}
// Custom hook for tracking
function useAnalytics() {
const track = (eventType, properties) => {
SiteTracking.track(eventType, properties);
};
return { track };
}
// Usage in components
function MyComponent() {
const { track } = useAnalytics();
const handleClick = () => {
track('button-click', { buttonId: 'my-button' });
};
return <button onClick={handleClick}>Click me</button>;
}
// Vue plugin
import SiteTracking from 'site-tracking-sdk';
const AnalyticsPlugin = {
install(app, options) {
SiteTracking.init(options);
app.config.globalProperties.$track = (eventType, properties) => {
SiteTracking.track(eventType, properties);
};
app.provide('analytics', SiteTracking);
}
};
// Usage in Vue app
app.use(AnalyticsPlugin, {
projectId: 'your-project-id'
});
// In components
export default {
methods: {
handleClick() {
this.$track('button-click', { buttonId: 'my-button' });
}
}
};
// Angular service
import { Injectable } from '@angular/core';
import SiteTracking from 'site-tracking-sdk';
@Injectable({
providedIn: 'root'
})
export class AnalyticsService {
constructor() {
SiteTracking.init({
projectId: 'your-project-id'
});
}
track(eventType: string, properties: object): void {
SiteTracking.track(eventType, properties);
}
}
// Usage in components
@Component({
selector: 'app-my-component',
template: '<button (click)="handleClick()">Click me</button>'
})
export class MyComponent {
constructor(private analytics: AnalyticsService) {}
handleClick(): void {
this.analytics.track('button-click', { buttonId: 'my-button' });
}
}
const express = require('express');
const axios = require('axios');
const app = express();
// Middleware for tracking
app.use((req, res, next) => {
// Track API requests
axios.post('https://your-domain.com/api/v1/events/your-project-id', {
event_type: 'api_request',
properties: {
method: req.method,
path: req.path,
user_agent: req.get('User-Agent'),
ip: req.ip
}
}, {
headers: {
'Authorization': 'Bearer your-api-token'
}
}).catch(console.error);
next();
});
// Custom event tracking
app.post('/track', async (req, res) => {
try {
const response = await axios.post(
'https://your-domain.com/api/v1/events/your-project-id',
req.body,
{
headers: {
'Authorization': 'Bearer your-api-token'
}
}
);
res.json(response.data);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
from flask import Flask, request
import requests
app = Flask(__name__)
# Configuration
SITE_TRACKING_API = 'https://your-domain.com/api/v1'
API_TOKEN = 'your-api-token'
PROJECT_ID = 'your-project-id'
def track_event(event_type, properties):
"""Track event with Site Tracking API"""
try:
requests.post(
f'{SITE_TRACKING_API}/events/{PROJECT_ID}',
headers={
'Authorization': f'Bearer {API_TOKEN}',
'Content-Type': 'application/json'
},
json={
'event_type': event_type,
'properties': properties
}
)
except Exception as e:
app.logger.error(f"Tracking error: {e}")
@app.route('/api/action', methods=['POST'])
def handle_action():
"""Handle custom action tracking"""
data = request.get_json()
track_event('custom_action', {
'action': data.get('action'),
'user_id': data.get('user_id'),
'timestamp': datetime.utcnow().isoformat()
})
return {'status': 'success'}
import { NativeModules, Platform } from 'react-native';
const SiteTracking = NativeModules.SiteTracking;
// Initialize tracking
SiteTracking.init({
projectId: 'your-project-id',
platform: Platform.OS
});
// Track events
SiteTracking.track('screen_view', {
screen_name: 'HomeScreen',
user_id: 'user-123'
});
SiteTracking.track('button_tap', {
button_id: 'login-button',
screen_name: 'LoginScreen'
});
import SiteTrackingSDK
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Initialize Site Tracking
SiteTracking.shared.initialize(projectId: "your-project-id")
return true
}
}
// Track events in view controllers
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Track screen view
SiteTracking.shared.track("screen_view", properties: [
"screen_name": "MainViewController"
])
}
@IBAction func buttonTapped(_ sender: UIButton) {
// Track button tap
SiteTracking.shared.track("button_tap", properties: [
"button_id": sender.accessibilityIdentifier ?? "unknown"
])
}
}
import com.sitetracking.sdk.SiteTracking
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialize Site Tracking
SiteTracking.initialize(this, "your-project-id")
// Track screen view
SiteTracking.track("screen_view", mapOf(
"screen_name" to "MainActivity"
))
}
fun onButtonClick(view: View) {
// Track button click
SiteTracking.track("button_click", mapOf(
"button_id" to view.id.toString()
))
}
}
// Mock Site Tracking for testing
const mockSiteTracking = {
init: jest.fn(),
track: jest.fn()
};
jest.mock('site-tracking-sdk', () => mockSiteTracking);
test('should track button click', () => {
const { track } = useAnalytics();
track('button-click', { buttonId: 'test-button' });
expect(mockSiteTracking.track).toHaveBeenCalledWith('button-click', {
buttonId: 'test-button'
});
});
import pytest
import requests
def test_api_integration():
"""Test API integration with Site Tracking"""
response = requests.post(
'https://your-domain.com/api/v1/events/test-project',
headers={'Authorization': 'Bearer test-token'},
json={
'event_type': 'test_event',
'properties': {'test': True}
}
)
assert response.status_code == 200
assert response.json()['status'] == 'success'
// Enable debug mode
SiteTracking.debug(true);
// Check tracking status
console.log(SiteTracking.getStatus());
// View queued events
console.log(SiteTracking.getQueuedEvents());
This integration guide provides comprehensive coverage of various integration methods, enabling you to successfully incorporate the Open Source Site Tracking platform into your existing systems and workflows.