mirror of
https://github.com/jakejarvis/website-stats.git
synced 2025-04-26 07:35:21 -04:00
organize data into year/month directories
This commit is contained in:
parent
debc6ac58f
commit
0bc216eb4a
8
.github/dependabot.yml
vendored
Normal file
8
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
version: 2
|
||||
|
||||
updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
versioning-strategy: increase
|
2
.github/workflows/daily.yml
vendored
2
.github/workflows/daily.yml
vendored
@ -14,4 +14,4 @@ jobs:
|
||||
with:
|
||||
node-version: 16
|
||||
- run: yarn install
|
||||
- run: yarn run daily
|
||||
- run: yarn run snapshot
|
||||
|
@ -1,147 +1,147 @@
|
||||
[
|
||||
{
|
||||
"slug": "notes/how-to-pull-request-fork-github",
|
||||
"hits": 90376,
|
||||
"hits": 90442,
|
||||
"title": "How To: Fork a GitHub Repository & Submit a Pull Request",
|
||||
"url": "https://jarv.is/notes/how-to-pull-request-fork-github/",
|
||||
"date": "2019-04-09T06:17:03.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/how-to-backup-linux-server",
|
||||
"hits": 57088,
|
||||
"hits": 57095,
|
||||
"title": "How To: Automatically Backup a Linux VPS to a Separate Cloud Storage Service",
|
||||
"url": "https://jarv.is/notes/how-to-backup-linux-server/",
|
||||
"date": "2019-06-09T23:03:10.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/shodan-search-queries",
|
||||
"hits": 30999,
|
||||
"hits": 31029,
|
||||
"title": "Fascinating & Frightening Shodan Search Queries (AKA: The Internet of Sh*t)",
|
||||
"url": "https://jarv.is/notes/shodan-search-queries/",
|
||||
"date": "2019-09-19T13:56:10.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/github-rename-master",
|
||||
"hits": 16643,
|
||||
"hits": 16674,
|
||||
"title": "How To: Safely Rename master Branch on GitHub ✊🏾",
|
||||
"url": "https://jarv.is/notes/github-rename-master/",
|
||||
"date": "2020-06-28T13:28:52.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/coronavirus-open-source",
|
||||
"hits": 11033,
|
||||
"hits": 11034,
|
||||
"title": "COVID-19 vs. the Open Source Community ⚔️",
|
||||
"url": "https://jarv.is/notes/coronavirus-open-source/",
|
||||
"date": "2020-03-23T19:17:09.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/cloudflare-dns-archive-is-blocked",
|
||||
"hits": 9923,
|
||||
"hits": 9937,
|
||||
"title": "Does Cloudflare's 1.1.1.1 DNS Block Archive.is?",
|
||||
"url": "https://jarv.is/notes/cloudflare-dns-archive-is-blocked/",
|
||||
"date": "2019-05-04T13:35:12.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/how-to-shrink-linux-virtual-disk-vmware",
|
||||
"hits": 6686,
|
||||
"hits": 6701,
|
||||
"title": "How To: Shrink a Linux Virtual Machine Disk with VMware",
|
||||
"url": "https://jarv.is/notes/how-to-shrink-linux-virtual-disk-vmware/",
|
||||
"date": "2018-12-04T23:10:04.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/finding-candidates-subdomain-takeovers",
|
||||
"hits": 6477,
|
||||
"hits": 6480,
|
||||
"title": "Finding Candidates for Subdomain Takeovers",
|
||||
"url": "https://jarv.is/notes/finding-candidates-subdomain-takeovers/",
|
||||
"date": "2019-03-10T15:19:48.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/css-waving-hand-emoji",
|
||||
"hits": 4876,
|
||||
"hits": 4896,
|
||||
"title": "Animated Waving Hand Emoji 👋 Using CSS",
|
||||
"url": "https://jarv.is/notes/css-waving-hand-emoji/",
|
||||
"date": "2019-04-17T18:20:10.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/dark-mode",
|
||||
"hits": 3691,
|
||||
"hits": 3692,
|
||||
"title": "How To: Add Dark Mode to a Website 🌓",
|
||||
"url": "https://jarv.is/notes/dark-mode/",
|
||||
"date": "2020-04-29T16:14:09.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/netlify-analytics-review",
|
||||
"hits": 1690,
|
||||
"hits": 1691,
|
||||
"title": "Netlify Analytics Review",
|
||||
"url": "https://jarv.is/notes/netlify-analytics-review/",
|
||||
"date": "2019-11-13T13:21:22.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/y2k-sandbox",
|
||||
"hits": 1447,
|
||||
"hits": 1451,
|
||||
"title": "I Made A Thing, Powered by Windows Me™",
|
||||
"url": "https://jarv.is/notes/y2k-sandbox/",
|
||||
"date": "2020-06-06T14:05:23.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/dropping-dropbox",
|
||||
"hits": 1413,
|
||||
"hits": 1418,
|
||||
"title": "Why I'm Dropping Dropbox",
|
||||
"url": "https://jarv.is/notes/dropping-dropbox/",
|
||||
"date": "2019-11-20T21:22:43.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/github-actions",
|
||||
"hits": 1126,
|
||||
"hits": 1134,
|
||||
"title": "I ❤️ GitHub Actions",
|
||||
"url": "https://jarv.is/notes/github-actions/",
|
||||
"date": "2019-10-25T17:58:39.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/presidential-candidates-404-pages",
|
||||
"hits": 1021,
|
||||
"hits": 1022,
|
||||
"title": "Ranking 2020 Presidential Candidates's 404 Pages",
|
||||
"url": "https://jarv.is/notes/presidential-candidates-404-pages/",
|
||||
"date": "2019-10-30T17:58:39.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/security-headers-cloudflare-workers",
|
||||
"hits": 977,
|
||||
"hits": 980,
|
||||
"title": "Adding Security Headers Using Cloudflare Workers",
|
||||
"url": "https://jarv.is/notes/security-headers-cloudflare-workers/",
|
||||
"date": "2019-02-28T07:18:10.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/bernie-sanders-bern-app-data",
|
||||
"hits": 800,
|
||||
"hits": 801,
|
||||
"title": "Bernie Sanders' Creepy \"BERN\" App Wants Your Data...From Your Best Friends",
|
||||
"url": "https://jarv.is/notes/bernie-sanders-bern-app-data/",
|
||||
"date": "2019-05-08T14:31:02.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/cool-bash-tricks-for-your-terminal-dotfiles",
|
||||
"hits": 367,
|
||||
"hits": 368,
|
||||
"title": "Cool Bash Tricks for Your Terminal's \"Dotfiles\"",
|
||||
"url": "https://jarv.is/notes/cool-bash-tricks-for-your-terminal-dotfiles/",
|
||||
"date": "2018-12-11T00:01:50.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/my-first-code",
|
||||
"hits": 359,
|
||||
"hits": 360,
|
||||
"title": "My First Code: Jake's Bulletin Board",
|
||||
"url": "https://jarv.is/notes/my-first-code/",
|
||||
"date": "2019-10-01T12:34:25.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/millenial-with-hillary-clinton",
|
||||
"hits": 314,
|
||||
"hits": 315,
|
||||
"title": "Why This Millennial Is With Hillary Clinton Now — and Why We All Need To Be In November",
|
||||
"url": "https://jarv.is/notes/millenial-with-hillary-clinton/",
|
||||
"date": "2016-02-29T04:10:26.000Z"
|
||||
},
|
||||
{
|
||||
"slug": "notes/no-homo-still-raps-motto",
|
||||
"hits": 163,
|
||||
"hits": 164,
|
||||
"title": "\"No Homo!\" — Still Rap's Motto in 2012?",
|
||||
"url": "https://jarv.is/notes/no-homo-still-raps-motto/",
|
||||
"date": "2013-11-22T15:58:20.000Z"
|
@ -5,14 +5,14 @@
|
||||
"author": "Jake Jarvis <jake@jarv.is>",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"daily": "node scripts/daily.js"
|
||||
"snapshot": "node scripts/snapshot.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"fs-extra": "^10.0.0",
|
||||
"got": "^11.8.2",
|
||||
"luxon": "^1.27.0",
|
||||
"luxon": "^2.0.2",
|
||||
"pkg-dir": "^5.0.0",
|
||||
"prettier": "^2.3.2",
|
||||
"simple-git": "^2.40.0"
|
||||
"simple-git": "^2.45.1"
|
||||
}
|
||||
}
|
||||
|
@ -12,17 +12,23 @@ const API_ENDPOINT = "https://jarv.is/api/hits/";
|
||||
(async () => {
|
||||
// find our bearings
|
||||
const rootDir = await pkgDir(__dirname);
|
||||
const today = DateTime.now().toISODate();
|
||||
const jsonFile = path.join(rootDir, "data", `${today}.json`);
|
||||
const fullDate = DateTime.now().toISODate();
|
||||
const jsonPath = path.join(
|
||||
rootDir,
|
||||
"data",
|
||||
DateTime.now().toFormat('yyyy'), // year
|
||||
DateTime.now().toFormat('LL'), // month
|
||||
`${fullDate}.json` // year-month-day.json
|
||||
);
|
||||
|
||||
// pull the latest stats from API
|
||||
console.info("📡 Fetching latest data from API...");
|
||||
const { body } = await got(API_ENDPOINT, { responseType: "json" });
|
||||
|
||||
// write pretty JSON to timestamped file
|
||||
console.info(`✏️ Writing data to ${jsonFile} ...`);
|
||||
console.info(`✏️ Writing data to ${jsonPath} ...`);
|
||||
await fs.outputFile(
|
||||
jsonFile,
|
||||
jsonPath,
|
||||
prettier.format(JSON.stringify(body.pages), { parser: "json" })
|
||||
);
|
||||
|
||||
@ -39,8 +45,8 @@ const API_ENDPOINT = "https://jarv.is/api/hits/";
|
||||
git.addConfig("user.email", "41898282+github-actions[bot]@users.noreply.github.com");
|
||||
|
||||
// do the normal git stuff
|
||||
await git.add([ jsonFile ]);
|
||||
await git.commit(`📈 Add new snapshot for ${today}`);
|
||||
await git.add([ jsonPath ]);
|
||||
await git.commit(`📈 Add new snapshot for ${fullDate}`);
|
||||
await git.push("origin", "main");
|
||||
} else {
|
||||
console.info("🤖 Didn't detect CI: skipping Git steps...");
|
46
yarn.lock
46
yarn.lock
@ -20,9 +20,9 @@
|
||||
integrity sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==
|
||||
|
||||
"@szmarczak/http-timer@^4.0.5":
|
||||
version "4.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152"
|
||||
integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
|
||||
integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
|
||||
dependencies:
|
||||
defer-to-connect "^2.0.0"
|
||||
|
||||
@ -42,16 +42,16 @@
|
||||
integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
|
||||
|
||||
"@types/keyv@*":
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.2.tgz#5d97bb65526c20b6e0845f6b0d2ade4f28604ee5"
|
||||
integrity sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg==
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.3.tgz#1c9aae32872ec1f20dcdaee89a9f3ba88f465e41"
|
||||
integrity sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/node@*":
|
||||
version "16.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.0.tgz#1836664e4fad13b51b07eb6e882a53925e6543c4"
|
||||
integrity sha512-OydMCocGMGqw/1BnWbhtK+AtwyWTOigtrQlRe57OQmTNcI3HKlVI5FGlh+c4mSqInMPLynFrTlYjfajPu9O/eQ==
|
||||
version "16.7.13"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.13.tgz#86fae356b03b5a12f2506c6cf6cd9287b205973f"
|
||||
integrity sha512-pLUPDn+YG3FYEt/pHI74HmnJOWzeR+tOIQzUx93pi9M7D8OE7PSLr97HboXwk5F+JS+TLtWuzCOW97AHjmOXXA==
|
||||
|
||||
"@types/responselike@*", "@types/responselike@^1.0.0":
|
||||
version "1.0.0"
|
||||
@ -153,9 +153,9 @@ got@^11.8.2:
|
||||
responselike "^2.0.0"
|
||||
|
||||
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
|
||||
version "4.2.6"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
|
||||
integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
|
||||
version "4.2.8"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
|
||||
integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
|
||||
|
||||
http-cache-semantics@^4.0.0:
|
||||
version "4.1.0"
|
||||
@ -203,10 +203,10 @@ lowercase-keys@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
|
||||
integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
|
||||
|
||||
luxon@^1.27.0:
|
||||
version "1.27.0"
|
||||
resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.27.0.tgz#ae10c69113d85dab8f15f5e8390d0cbeddf4f00f"
|
||||
integrity sha512-VKsFsPggTA0DvnxtJdiExAucKdAnwbCCNlMM5ENvHlxubqWd0xhZcdb4XgZ7QFNhaRhilXCFxHuoObP5BNA4PA==
|
||||
luxon@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/luxon/-/luxon-2.0.2.tgz#11f2cd4a11655fdf92e076b5782d7ede5bcdd133"
|
||||
integrity sha512-ZRioYLCgRHrtTORaZX1mx+jtxKtKuI5ZDvHNAmqpUzGqSrR+tL4FVLn/CUGMA3h0+AKD1MAxGI5GnCqR5txNqg==
|
||||
|
||||
mimic-response@^1.0.0:
|
||||
version "1.0.1"
|
||||
@ -285,9 +285,9 @@ quick-lru@^5.1.1:
|
||||
integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
|
||||
|
||||
resolve-alpn@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.1.2.tgz#30b60cfbb0c0b8dc897940fe13fe255afcdd4d28"
|
||||
integrity sha512-8OyfzhAtA32LVUsJSke3auIyINcwdh5l3cvYKdKO0nvsYSKuiLfTM5i78PJswFPT8y6cPW+L1v6/hE95chcpDA==
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
|
||||
integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
|
||||
|
||||
responselike@^2.0.0:
|
||||
version "2.0.0"
|
||||
@ -296,10 +296,10 @@ responselike@^2.0.0:
|
||||
dependencies:
|
||||
lowercase-keys "^2.0.0"
|
||||
|
||||
simple-git@^2.40.0:
|
||||
version "2.40.0"
|
||||
resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-2.40.0.tgz#1f9da964caa032290ec25cb06ccacc2c17d99d75"
|
||||
integrity sha512-7IO/eQwrN5kvS38TTu9ljhG9tx2nn0BTqZOmqpPpp51TvE44YIvLA6fETqEVA8w/SeEfPaVv6mk7Tsk9Jns+ag==
|
||||
simple-git@^2.45.1:
|
||||
version "2.45.1"
|
||||
resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-2.45.1.tgz#27d26ae59f734ffd7e1dea16a1ee3b309d68f5ef"
|
||||
integrity sha512-NmEoThiLTJxl26WNtZxtJTue18ReTcSrf3so5vJG/O8KY9uMxH+yAhXV/DElBJyOYZrrBbVsH8JOFxgENdc9Xg==
|
||||
dependencies:
|
||||
"@kwsites/file-exists" "^1.1.1"
|
||||
"@kwsites/promise-deferred" "^1.1.1"
|
||||
|
Loading…
x
Reference in New Issue
Block a user