https://github.com/drivly/colo.do
Cloudflare Durable Object Proxy for specific Colo Locations
https://github.com/drivly/colo.do
Last synced: 5 months ago
JSON representation
Cloudflare Durable Object Proxy for specific Colo Locations
- Host: GitHub
- URL: https://github.com/drivly/colo.do
- Owner: drivly
- License: mit
- Created: 2022-08-02T08:31:45.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-02-04T16:01:34.000Z (over 2 years ago)
- Last Synced: 2024-12-24T02:49:38.594Z (5 months ago)
- Language: JavaScript
- Homepage: https://colo.do
- Size: 248 KB
- Stars: 9
- Watchers: 4
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# [colo.do](https://colo.do)
Cloudflare Durable Object Proxy for specific Colo Locations to measure and monitor performance
```json
{
"visitorLatencyToWorker": 36,
"workerLatencyToDurable": 20,
"visitorDistanceToWorker": 551,
"workerDistanceToDurable": 0,
"visitorDistanceToDurable": 551,
"workerLocation": {
"iata": "ORD",
"lat": 41.97859955,
"lon": -87.90480042,
"cca2": "US",
"region": "North America",
"city": "Chicago"
},
"durableLocation": {
"iata": "ORD",
"lat": 41.97859955,
"lon": -87.90480042,
"cca2": "US",
"region": "North America",
"city": "Chicago"
},
"visitor": {
"latitude": "44.78180",
"longitude": "-93.51650",
"country": "US",
"region": "Minnesota",
"city": "Shakopee",
"asn": 7922,
"isp": "Comcast Cable",
"metroCode": "613",
"postalCode": "55379"
}
}
```Here is the code:
```javascript
import getDistance from 'geolib/es/getDistance'export default {
fetch: async (req, env) => {
const { colo: workerColo, latitude, longitude, country, region, city, asn, asOrganization: isp, metroCode, postalCode, clientTcpRtt: visitorLatencyToWorker } = req.cf
const visitor = { latitude, longitude, country, region, city, asn, isp, metroCode, postalCode }
const locations = await fetch('https://speed.cloudflare.com/locations').then(res => res.json())
const start = new Date()
const { colo: doColo } = await env.COLO.get(env.COLO.idFromName(workerColo))
.fetch('https://workers.cloudflare.com/cf.json').then(res => res.json())
const workerLatencyToDurable = new Date() - start
const workerLocation = locations.find(loc => loc.iata == workerColo)
const durableLocation = locations.find(loc => loc.iata == doColo)
const visitorDistanceToWorker = Math.round(getDistance({latitude,longitude}, {latitude: workerLocation.lat, longitude: workerLocation.lon}) / 1000)
const workerDistanceToDurable = Math.round(getDistance({latitude: workerLocation.lat, longitude: workerLocation.lon}, {latitude: durableLocation.lat, longitude: durableLocation.lon}) / 1000)
const visitorDistanceToDurable = Math.round(getDistance({latitude,longitude}, {latitude: durableLocation.lat, longitude: durableLocation.lon}) / 1000)
return new Response(JSON.stringify({ visitorLatencyToWorker, workerLatencyToDurable, visitorDistanceToWorker, workerDistanceToDurable, visitorDistanceToDurable, visitor, workerLocation, durableLocation }, null, 2))
}
}export class Colo {
async fetch(req) {
return fetch(req)
}
}
```## Roadmap
- [ ] Create Colo List DO
- [ ] Enable Proxying through any colo DO
- [ ] Log latency and performance to gather data
- [ ] Ping every Colo DO from every other Colo DO to measure/track performance over time