From 25d766a156aaad87f126d68b662608b64cfa87c9 Mon Sep 17 00:00:00 2001 From: Sascha Leib Date: Mon, 15 Sep 2025 17:49:16 +0200 Subject: [PATCH] More bots and clients for new release --- config/default-config.json | 7 ++- config/known-bots.json | 12 ++++ config/known-clients.json | 8 +++ img/bots.png | Bin 8111 -> 9261 bytes img/clients.png | Bin 20706 -> 22169 bytes plugin.info.txt | 2 +- script.js | 126 +++++++++++++++++++++---------------- style.less | 31 ++++++--- 8 files changed, 120 insertions(+), 66 deletions(-) diff --git a/config/default-config.json b/config/default-config.json index c9d6faf..75bccc5 100644 --- a/config/default-config.json +++ b/config/default-config.json @@ -63,7 +63,7 @@ }, {"func": "clientAccepts", "params": ["zh"], "id": "zhLang", "desc": "Client accepts Chinese language", - "bot": 60 + "bot": 50 }, {"func": "matchesCountry", "params": ["BR", "CN", "RU", "US", "MX", "SG", "IN", "UY"], "id": "isFrom", "desc": "Location is in a known bot-spamming country.", @@ -81,10 +81,11 @@ {"from": "47.200.0.0", "to": "47.203.255.255", "m": 14, "label": "Frontier Communications [US]"}, {"from": "49.0.200.0", "to": "49.0.255.254", "label": "Huawei [SG]"}, {"from": "52.220.0.0", "to": "52.222.255.254", "label": "Amazon Data Services"}, - {"from": "66.249.64.0", "to": "66.249.95.255", "m": 19, "label": "Google LLC [US]"}, + {"from": "66.249.64.0", "to": "66.249.95.255", "m": 19, "label": "Google LLC"}, {"from": "84.37.35.0", "to": "84.37.255.254", "label": "GTT.net [US]"}, {"from": "94.74.64.0", "to": "94.74.127.254", "label": "Huawei [HK]"}, {"from": "101.0.0.0", "to": "101.255.255.254", "label": "ChinaNet [CN]"}, + {"from": "104.196.0.0", "to": "104.199.255.255", "m": 14, "label": "Google LLC"}, {"from": "110.238.80.0", "to": "110.238.127.254", "label": "Huawei [SG]"}, {"from": "111.119.192.0", "to": "111.119.255.254", "label": "Huawei [SG]"}, {"from": "119.0.0.0", "to": "119.207.255.254", "label": "Unicom [CN]"}, @@ -110,7 +111,7 @@ {"from": "2001:4860::::::", "to": "2001:4860:ffff:ffff:ffff:ffff:ffff:ffff", "m": 32, "label": "Google LLC [US]"}, {"from": "2001:0ee0::::::", "to": "2001:ee3:ffff:ffff:ffff:ffff:ffff:ffff", "m": 30, "label": "VNPT [VN]"}, {"from": "2408:8210::::::", "to": "2408:8210:ffff:ffff:ffff:ffff:ffff:ffff", "m": 30, "label": "China Unicom [CN]"}, - {"from": "2600:1f00::::::", "to": "2600:1fff:ffff:ffff:ffff:ffff:ffff:ffff", "m": "Amazon Cloud [US]"}, + {"from": "2600:1f00::::::", "to": "2600:1fff:ffff:ffff:ffff:ffff:ffff:ffff", "m": "Amazon Cloud"}, {"from": "2603:6010::::::", "to": "2603:6010:ffff:ffff:ffff:ffff:ffff:ffff", "m": 32, "label": "Charter [US]"}, {"from": "2603:8000::::::", "to": "2603:80ff:ffff:ffff:ffff:ffff:ffff:ffff", "m": 24, "label": "Charter [US]"}, {"from": "2607:a400::::::", "to": "2607:a400:ffff:ffff:ffff:ffff:ffff:ffff", "m": 32, "label": "Zenlayer Inc. [US]"}, diff --git a/config/known-bots.json b/config/known-bots.json index 811a335..60ca4a5 100644 --- a/config/known-bots.json +++ b/config/known-bots.json @@ -28,12 +28,24 @@ "rx": ["\\sGoogleOther(\\-\\w+)?[\\)\\/]"], "url": "https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers#googleother" }, + {"id": "googinspct", + "n": "Google-InspectionTool", "geo": "US", + "r": ["Google-InspectionTool"], + "rx": ["\\sGoogle-InspectionTool(\\-\\w+)?[\\)\\/]"], + "url": "https://support.google.com/webmasters/answer/9012289" + }, {"id": "applebot", "n": "Applebot", "geo": "US", "r": ["Applebot"], "rx": ["Applebot\\/(\\d+\\.\\d+);"], "url": "http://www.apple.com/go/applebot" }, + {"id": "reddit", + "n": "RedditBot", + "r": ["Applebot"], + "rx": [" redditbot\\/(\\d+\\.\\d+);"], + "url": "http://www.reddit.com/feedback" + }, {"id": "slurp", "n": "Slurp (Yahoo!)", "geo": "US", "r": ["Slurp"], diff --git a/config/known-clients.json b/config/known-clients.json index 67c535d..dda615a 100644 --- a/config/known-clients.json +++ b/config/known-clients.json @@ -3,6 +3,10 @@ "id": "opera", "rx": [ "\\sOpera\\/.*?Version\\/(\\S+)", "Opera\\/(\\S+)" ] }, + {"n": "Firefox on iOS", + "id": "firefox", + "rx": [ "\\sFxiOS\\/(\\d+)\\." ] + }, {"n": "AOL Explorer", "id": "aol", "rx": [ "\\sAOL\\s(\\d+\\.\\d+)\\)", "\\sAOLBUILD\\/(\\S+)", "\\sBukaolshop\\s", "\\.aolapp\\/(\\d+\\.\\d+)\\." ] @@ -74,5 +78,9 @@ {"n": "Firefox", "id": "firefox", "rx": [ "\\sFirefox\\/(\\d\\d\\d)\\." ] + }, + {"n": "AppleWebKit", + "id": "webkit", + "rx": [ "\\sAppleWebKit\\/(\\d\\d\\d)\\." ] } ] diff --git a/img/bots.png b/img/bots.png index 2351c24862f0c58d93b442d9f566fd4f636ff339..087993f27be2fc97abbf4f0a314c92f1c6a807b0 100644 GIT binary patch delta 9039 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 mD4!d#JDBY0bNC_=(fJM&M{7j@0000 diff --git a/img/clients.png b/img/clients.png index b087ff6eeec789e500771e1fad1b4935c57a20b5..50f8a300e4b9972b5644e195e476dde3d7fd41e1 100644 GIT binary patch delta 22086 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

hasU?X!6 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

5*|> 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 BYp?(S delta 20611 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 iVFhI!I!M?e^8W$X_&B)OrpWaG0000 a._firstSeen - b._firstSeen ); data._pageViews.forEach( (page) => { - //console.log("page:",page); - - const pgLi = make('li'); - - const lGroup = make('span'); // left group: - - lGroup.appendChild(make('span', { - 'data-lang': page.lang, - 'title': "PageID: " + page.pg - }, page.pg)); /* DW Page ID */ - - pgLi.appendChild(lGroup); // end of left group - - const rGroup = make('span'); // right group: - - let visitTimeStr = "Bounce"; - const visitDuration = page._lastSeen.getTime() - page._firstSeen.getTime(); - if (visitDuration > 0) { - visitTimeStr = Math.floor(visitDuration / 1000) + "s"; - } - - /*if (page._ref) { - rGroup.appendChild(make('span', { - 'data-ref': page._ref.host, - 'title': "Referrer: " + page._ref.full - }, page._ref.site)); - } else { - rGroup.appendChild(make('span', { - }, "No referer")); - }*/ - //rGroup.appendChild(make('span', {}, ( page._seenBy ? page._seenBy.join(', ') : '—') + '; ' + page._tickCount)); - - // get the time difference: - const tDiff = BotMon.t._formatTimeDiff(page._firstSeen, page._lastSeen); - if (tDiff) { - rGroup.appendChild(make('span', {'class': 'visit-length', 'title': 'Last seen: ' + page._lastSeen.toLocaleString()}, tDiff)); - } else { - rGroup.appendChild(make('span', { - 'class': 'bounce', - 'title': "Visitor bounced"}, "Bounce")); - } - rGroup.appendChild(make('span', { - 'class': 'first-seen', - 'title': "First visited: " + page._firstSeen.toLocaleString() - }, BotMon.t._formatTime(page._firstSeen))); - - pgLi.appendChild(rGroup); // end of right group - - - pageList.appendChild(pgLi); + pageList.appendChild(BotMon.live.gui.lists._makePageViewItem(page)); }); pagesDd.appendChild(pageList); dl.appendChild(pagesDd); @@ -2063,8 +2019,68 @@ BotMon.live = { } // return the element to add to the UI: return dl; - } + }, + // make a page view item: + _makePageViewItem: function(page) { + console.log("makePageViewItem:",page); + + // shortcut for neater code: + const make = BotMon.t._makeElement; + + // the actual list item: + const pgLi = make('li'); + + const row1 = make('div', {'class': 'row'}); + + row1.appendChild(make('span', { // page id is the left group + 'data-lang': page.lang, + 'title': "PageID: " + page.pg + }, page.pg)); /* DW Page ID */ + + // get the time difference: + row1.appendChild(make('span', { + 'class': 'first-seen', + 'title': "First visited: " + page._firstSeen.toLocaleString() + " UTC" + }, BotMon.t._formatTime(page._firstSeen))); + + pgLi.appendChild(row1); + + /* LINE 2 */ + + const row2 = make('div', {'class': 'row'}); + + // page referrer: + if (page._ref) { + row2.appendChild(make('span', { + 'class': 'referer', + 'title': "Referrer: " + page._ref.href + }, page._ref.hostname)); + } else { + row2.appendChild(make('span', { + 'class': 'referer' + }, "No referer")); + } + + // visit duration: + let visitTimeStr = "Bounce"; + const visitDuration = page._lastSeen.getTime() - page._firstSeen.getTime(); + if (visitDuration > 0) { + visitTimeStr = Math.floor(visitDuration / 1000) + "s"; + } + const tDiff = BotMon.t._formatTimeDiff(page._firstSeen, page._lastSeen); + if (tDiff) { + row2.appendChild(make('span', {'class': 'visit-length', 'title': 'Last seen: ' + page._lastSeen.toLocaleString()}, tDiff)); + } else { + row2.appendChild(make('span', { + 'class': 'bounce', + 'title': "Visitor bounced"}, "Bounce")); + } + + pgLi.appendChild(row2); + + return pgLi; + } } } }; diff --git a/style.less b/style.less index d40963d..1aabda2 100644 --- a/style.less +++ b/style.less @@ -40,7 +40,7 @@ /* Bot icons */ &.bot::before { background-image: url('img/bots.png') } - &.bot_googlebot::before, &.bot_googleads::before, &.bot_googleapi::before, &.bot_googleother::before { background-position-y: -20px } + &.bot_googlebot::before, &.bot_googleads::before, &.bot_googleapi::before, &.bot_googleother::before, &.bot_googinspct::before { background-position-y: -20px } &.bot_bingbot::before { background-position-y: -40px } &.bot_applebot::before { background-position-y: -60px } &.bot_openai::before { background-position-y: -80px } @@ -49,6 +49,7 @@ &.bot_seznambot::before { background-position-y: -140px } &.bot_claude::before { background-position-y: -160px } &.bot_applemsgs::before { background-position-y: -180px } + &.bot_reddit::before { background-position-y: -200px } /* platform icons */ &.platform::before { background-image: url('img/platforms.png') } @@ -86,6 +87,7 @@ &.cl_ffold::before { background-position-y: -300px } &.cl_chromeold::before { background-position-y: -320px } &.cl_ecosia::before { background-position-y: -340px } + &.cl_webkit::before { background-position-y: -360px } /* Country flags */ /* Note: flag images and CSS adapted from: https://github.com/lafeber/world-flags-sprite/ */ @@ -530,9 +532,7 @@ li { & { display: flex; - justify-content: space-between; - align-items: baseline; - white-space: nowrap; + flex-direction: column; line-height: 1.2rem; margin: 0; padding: 0 .25em; @@ -540,6 +540,14 @@ &:nth-child(odd) { background-color: #DFDFDF; } + div.row { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: baseline; + white-space: nowrap; + line-height: 1.35em; + } span { display: inline-block; } @@ -548,6 +556,8 @@ span[data-lang] { overflow: hidden; text-overflow: ellipsis; + padding: 2pt 0 0 2pt; + } span[data-lang]::after { content: attr(data-lang); @@ -561,7 +571,10 @@ } span.first-seen { min-width: 4.2em; - text-align: right;; + text-align: right; + } + span.visit-length { + font-size: smaller; } span.bounce { width: 1.25em; height: 1.25em; @@ -570,9 +583,13 @@ span.bounce::before { display: inline-block; content: ''; - width: 1.25em; height: 1.25em; + width: 1.25em; height: 1em; background: transparent url('img/bounce.svg') center no-repeat; - background-size: 1.25em; + background-size: .95em; + } + span.referer { + font-size: smaller; + margin-left: .67rem; } } }