From: Sen Hastings <sen@phobosdpl.com>
To: buildroot@buildroot.org
Cc: Sen Hastings <sen@phobosdpl.com>
Subject: [Buildroot] [PATCH v1 2/2] support/scripts/pkg-stats: optimize CSS selector usage
Date: Fri, 5 Aug 2022 15:01:14 -0500 [thread overview]
Message-ID: <20220805200114.288208-2-sen@phobosdpl.com> (raw)
In-Reply-To: <20220805200114.288208-1-sen@phobosdpl.com>
Having lots of CSS selector declarations adds up, especially at 70k+
elements.
This reduces the number of CSS selectors printed in the markup
to the bare minimum, by using pseudo-classes and tag names as selectors.
example: https://sen-h.github.io/pkg-stats/9ad05210dcd9e4fb6b6a45be87c0fbb3e022085b.html
Signed-off-by: Sen Hastings <sen@phobosdpl.com>
---
v1->v2:
* added link to example html
---
support/scripts/pkg-stats | 132 ++++++++++++++++++++------------------
1 file changed, 70 insertions(+), 62 deletions(-)
diff --git a/support/scripts/pkg-stats b/support/scripts/pkg-stats
index 39da5e5593..654b918911 100755
--- a/support/scripts/pkg-stats
+++ b/support/scripts/pkg-stats
@@ -845,7 +845,20 @@ function expandField(field){
<style>
-.see-more{
+div {
+ text-align: center;
+ border: solid 1px gray;
+}
+#results-grid div{
+ text-align: left;
+}
+#package-grid div:nth-child(13n+1), #package-grid div:nth-child(13n+13) {
+ text-align: left;
+}
+#package-grid div:nth-child(13){
+ text-align: center;
+}
+.see-more {
display: none;
}
@@ -859,6 +872,7 @@ function expandField(field){
padding: 10px 2px 10px 2px;
}
#package-grid, #results-grid {
+ border: none;
display: grid;
grid-gap: 2px;
grid-template-columns: 1fr repeat(12, min-content);
@@ -866,21 +880,15 @@ function expandField(field){
#results-grid {
grid-template-columns: 3fr 1fr;
}
-.data {
- border: solid 1px gray;
+.correct, .nopatches, .good_url, .version-good, .cpe-ok, .cve-ok {
+ background: #d2ffc4;
}
-.centered {
- text-align: center;
+.wrong, .lotsofpatches, .invalid_url, .version-needs-update, .cpe-nok, .cve-nok {
+ background: #ff9a69;
+}
+.somepatches, .missing_url, .version-unknown, .cpe-unknown, .cve-unknown {
+ background: #ffd870;
}
- .correct, .nopatches, .good_url, .version-good, .cpe-ok, .cve-ok {
- background: #d2ffc4;
- }
- .wrong, .lotsofpatches, .invalid_url, .version-needs-update, .cpe-nok, .cve-nok {
- background: #ff9a69;
- }
- .somepatches, .missing_url, .version-unknown, .cpe-unknown, .cve-unknown {
- background: #ffd870;
- }
.cve_ignored, .version-error {
background: #ccc;
}
@@ -926,9 +934,9 @@ def boolean_str(b):
def dump_html_pkg(f, pkg):
- f.write(f'<div class=\"data\">{pkg.path}</div>\n')
+ f.write(f'<div>{pkg.path}</div>\n')
# Patch count
- div_class = ["centered data"]
+ div_class = []
if pkg.patch_count == 0:
div_class.append("nopatches")
elif pkg.patch_count < 5:
@@ -939,7 +947,7 @@ def dump_html_pkg(f, pkg):
# Infrastructure
infra = infra_str(pkg.infras)
- div_class = ["centered data"]
+ div_class = []
if infra == "Unknown":
div_class.append("wrong")
else:
@@ -947,7 +955,7 @@ def dump_html_pkg(f, pkg):
f.write(f' <div class=\"{" ".join(div_class)}\">{infra_str(pkg.infras)}</div>\n')
# License
- div_class = ["centered data"]
+ div_class = []
if pkg.is_status_ok('license'):
div_class.append("correct")
else:
@@ -955,7 +963,7 @@ def dump_html_pkg(f, pkg):
f.write(f' <div class=\"{" ".join(div_class)}\">{boolean_str(pkg.is_status_ok("license"))}</div>\n')
# License files
- div_class = ["centered data"]
+ div_class = []
if pkg.is_status_ok('license-files'):
div_class.append("correct")
else:
@@ -963,7 +971,7 @@ def dump_html_pkg(f, pkg):
f.write(f' <div class=\"{" ".join(div_class)}\">{boolean_str(pkg.is_status_ok("license-files"))}</div>\n')
# Hash
- div_class = ["centered data"]
+ div_class = []
if pkg.is_status_ok('hash'):
div_class.append("correct")
else:
@@ -975,10 +983,10 @@ def dump_html_pkg(f, pkg):
current_version = pkg.current_version[:20] + "..."
else:
current_version = pkg.current_version
- f.write(f' <div>class=\"centered data\" {current_version}</div>\n')
+ f.write(f' <div>{current_version}</div>\n')
# Latest version
- div_class = ["centered data"]
+ div_class = []
if pkg.latest_version['status'] == RM_API_STATUS_ERROR:
div_class.append("version-error")
if pkg.latest_version['version'] is None:
@@ -1009,7 +1017,7 @@ def dump_html_pkg(f, pkg):
f.write(f' <div class=\"{" ".join(div_class)}\">{latest_version_text}</div>\n')
# Warnings
- div_class = ["centered data"]
+ div_class = []
if pkg.warnings == 0:
div_class.append("correct")
else:
@@ -1017,7 +1025,7 @@ def dump_html_pkg(f, pkg):
f.write(f' <div class=\"{" ".join(div_class)}\">{pkg.warnings}</div>\n')
# URL status
- div_class = ["centered data"]
+ div_class = []
url_str = pkg.status['url'][1]
if pkg.status['url'][0] in ("error", "warning"):
div_class.append("missing_url")
@@ -1030,7 +1038,7 @@ def dump_html_pkg(f, pkg):
f.write(f' <div class=\"{" ".join(div_class)}\">{url_str}</div>\n')
# CVEs
- div_class = ["centered data"]
+ div_class = []
if len(pkg.cves) > 10:
div_class.append("collapse")
if pkg.is_status_ok("cve"):
@@ -1045,7 +1053,7 @@ def dump_html_pkg(f, pkg):
if len(pkg.cves) > 10:
cve_total = len(pkg.cves) + 1
f.write(f' <div onclick=\"expandField(this.parentElement)\" \
- class=\"see-more centered cve_ignored\">see all ({cve_total}) ▾</div>\n')
+ style=\"text-align: center;\" class=\"see-more cve_ignored\">see all ({cve_total}) ▾</div>\n')
if pkg.is_status_error("cve"):
for cve in pkg.cves:
f.write(" <a href=\"https://security-tracker.debian.org/tracker/%s\">%s</a><br/>\n" % (cve, cve))
@@ -1058,16 +1066,16 @@ def dump_html_pkg(f, pkg):
f.write(" </div>\n")
# CVEs Ignored
- div_class = ["centered data"]
if pkg.ignored_cves:
- div_class.append("cve_ignored")
- f.write(f' <div class=\"{" ".join(div_class)}\">\n')
+ f.write(" <div class=\"cve_ignored\">\n")
+ else:
+ f.write(" <div>\n")
for ignored_cve in pkg.ignored_cves:
f.write(" <a href=\"https://security-tracker.debian.org/tracker/%s\">%s</a><br/>\n" % (ignored_cve, ignored_cve))
f.write(" </div>\n")
# CPE ID
- div_class = ["data"]
+ div_class = []
if pkg.is_status_ok("cpe"):
div_class.append("cpe-ok")
elif pkg.is_status_error("cpe"):
@@ -1099,31 +1107,31 @@ def dump_html_all_pkgs(f, packages):
f.write("""
<div id=\"package-grid\">
<div style="grid-column: 1;" onclick="sortGrid(this.id)" id=\"c1\"
- class=\"data label\"><span>Package</span><span></span></div>
+ class=\"label\"><span>Package</span><span></span></div>
<div style="grid-column: 2;" onclick="sortGrid(this.id)" id=\"c2\"
- class=\"centered data label\"><span>Patch count</span><span></span></div>
+ class=\"label\"><span>Patch count</span><span></span></div>
<div style="grid-column: 3;" onclick="sortGrid(this.id)" id=\"c3\"
- class=\"centered data label\">Infrastructure<span></span></div>
+ class=\"label\">Infrastructure<span></span></div>
<div style="grid-column: 4;" onclick="sortGrid(this.id)" id=\"c4\"
- class=\"centered data label\"><span>License</span><span></span></div>
+ class=\"label\"><span>License</span><span></span></div>
<div style="grid-column: 5;" onclick="sortGrid(this.id)" id=\"c5\"
- class=\"centered data label\"><span>License files</span><span></span></div>
+ class=\"label\"><span>License files</span><span></span></div>
<div style="grid-column: 6;" onclick="sortGrid(this.id)" id=\"c6\"
- class=\"centered data label\"><span>Hash file</span><span></span></div>
+ class=\"label\"><span>Hash file</span><span></span></div>
<div style="grid-column: 7;" onclick="sortGrid(this.id)" id=\"c7\"
- class=\"centered data label\"><span>Current version</span><span></span></div>
+ class=\"label\"><span>Current version</span><span></span></div>
<div style="grid-column: 8;" onclick="sortGrid(this.id)" id=\"c8\"
- class=\"centered data label\"><span>Latest version</span><span></span></div>
+ class=\"label\"><span>Latest version</span><span></span></div>
<div style="grid-column: 9;" onclick="sortGrid(this.id)" id=\"c9\"
- class=\"centered data label\"><span>Warnings</span><span></span></div>
+ class=\"label\"><span>Warnings</span><span></span></div>
<div style="grid-column: 10;" onclick="sortGrid(this.id)" id=\"c10\"
- class=\"centered data label\"><span>Upstream URL</span><span></span></div>
+ class=\"label\"><span>Upstream URL</span><span></span></div>
<div style="grid-column: 11;" onclick="sortGrid(this.id)" id=\"c11\"
- class=\"centered data label\"><span>CVEs</span><span></span></div>
+ class=\"label\"><span>CVEs</span><span></span></div>
<div style="grid-column: 12;" onclick="sortGrid(this.id)" id=\"c12\"
- class=\"centered data label\"><span>CVEs Ignored</span><span></span></div>
+ class=\"label\"><span>CVEs Ignored</span><span></span></div>
<div style="grid-column: 13;" onclick="sortGrid(this.id)" id=\"c13\"
- class=\"data label\"><span>CPE ID</span><span></span></div>
+ class=\"label\"><span>CPE ID</span><span></span></div>
""")
for pkg in sorted(packages):
dump_html_pkg(f, pkg)
@@ -1135,43 +1143,43 @@ def dump_html_stats(f, stats):
f.write("<div class=\"data\" id=\"results-grid\">\n")
infras = [infra[6:] for infra in stats.keys() if infra.startswith("infra-")]
for infra in infras:
- f.write(" <div class=\"data\">Packages using the <i>%s</i> infrastructure</div><div class=\"data\">%s</div>\n" %
+ f.write(" <div>Packages using the <i>%s</i> infrastructure</div><div>%s</div>\n" %
(infra, stats["infra-%s" % infra]))
- f.write(" <div class=\"data\">Packages having license information</div><div class=\"data\">%s</div>\n" %
+ f.write(" <div>Packages having license information</div><div>%s</div>\n" %
stats["license"])
- f.write(" <div class=\"data\">Packages not having license information</div><div class=\"data\">%s</div>\n" %
+ f.write(" <div>Packages not having license information</div><div>%s</div>\n" %
stats["no-license"])
- f.write(" <div class=\"data\">Packages having license files information</div><div class=\"data\">%s</div>\n" %
+ f.write(" <div>Packages having license files information</div><div>%s</div>\n" %
stats["license-files"])
- f.write(" <div class=\"data\">Packages not having license files information</div><div class=\"data\">%s</div>\n" %
+ f.write(" <div>Packages not having license files information</div><div>%s</div>\n" %
stats["no-license-files"])
- f.write(" <div class=\"data\">Packages having a hash file</div><div class=\"data\">%s</div>\n" %
+ f.write(" <div>Packages having a hash file</div><div>%s</div>\n" %
stats["hash"])
- f.write(" <div class=\"data\">Packages not having a hash file</div><div class=\"data\">%s</div>\n" %
+ f.write(" <div>Packages not having a hash file</div><div>%s</div>\n" %
stats["no-hash"])
- f.write(" <div class=\"data\">Total number of patches</div><div class=\"data\">%s</div>\n" %
+ f.write(" <div>Total number of patches</div><div>%s</div>\n" %
stats["patches"])
- f.write("<div class=\"data\">Packages having a mapping on <i>release-monitoring.org</i></div><div class=\"data\">%s</div>\n" %
+ f.write("<div>Packages having a mapping on <i>release-monitoring.org</i></div><div>%s</div>\n" %
stats["rmo-mapping"])
- f.write("<div class=\"data\">Packages lacking a mapping on <i>release-monitoring.org</i></div><div class=\"data\">%s</div>\n" %
+ f.write("<div>Packages lacking a mapping on <i>release-monitoring.org</i></div><div>%s</div>\n" %
stats["rmo-no-mapping"])
- f.write("<div class=\"data\">Packages that are up-to-date</div><div class=\"data\">%s</div>\n" %
+ f.write("<div>Packages that are up-to-date</div><div>%s</div>\n" %
stats["version-uptodate"])
- f.write("<div class=\"data\">Packages that are not up-to-date</div><div class=\"data\">%s</div>\n" %
+ f.write("<div>Packages that are not up-to-date</div><div>%s</div>\n" %
stats["version-not-uptodate"])
- f.write("<div class=\"data\">Packages with no known upstream version</div><div class=\"data\">%s</div>\n" %
+ f.write("<div>Packages with no known upstream version</div><div>%s</div>\n" %
stats["version-unknown"])
- f.write("<div class=\"data\">Packages affected by CVEs</div><div class=\"data\">%s</div>\n" %
+ f.write("<div>Packages affected by CVEs</div><div>%s</div>\n" %
stats["pkg-cves"])
- f.write("<div class=\"data\">Total number of CVEs affecting all packages</div><div class=\"data\">%s</div>\n" %
+ f.write("<div>Total number of CVEs affecting all packages</div><div>%s</div>\n" %
stats["total-cves"])
- f.write("<div class=\"data\">Packages affected by unsure CVEs</div><div class=\"data\">%s</div>\n" %
+ f.write("<div>Packages affected by unsure CVEs</div><div>%s</div>\n" %
stats["pkg-unsure-cves"])
- f.write("<div class=\"data\">Total number of unsure CVEs affecting all packages</div><div class=\"data\">%s</div>\n" %
+ f.write("<div>Total number of unsure CVEs affecting all packages</div><div>%s</div>\n" %
stats["total-unsure-cves"])
- f.write("<div class=\"data\">Packages with CPE ID</div><div class=\"data\">%s</div>\n" %
+ f.write("<div>Packages with CPE ID</div><div>%s</div>\n" %
stats["cpe-id"])
- f.write("<div class=\"data\">Packages without CPE ID</div><div class=\"data\">%s</div>\n" %
+ f.write("<div>Packages without CPE ID</div><div>%s</div>\n" %
stats["no-cpe-id"])
f.write("</div>\n")
--
2.34.1
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
next prev parent reply other threads:[~2022-08-05 20:02 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-05 20:01 [Buildroot] [PATCH v2 1/2] support/scripts/pkg-stats: move to procedurally generated row/column clases Sen Hastings
2022-08-05 20:01 ` Sen Hastings [this message]
2022-08-06 21:55 ` [Buildroot] [PATCH v1 2/2] support/scripts/pkg-stats: optimize CSS selector usage Thomas Petazzoni via buildroot
2022-08-06 21:51 ` [Buildroot] [PATCH v2 1/2] support/scripts/pkg-stats: move to procedurally generated row/column clases Thomas Petazzoni via buildroot
2022-08-30 6:32 ` Sen Hastings
-- strict thread matches above, loose matches on Subject: below --
2022-08-08 22:23 Sen Hastings
2022-08-08 22:23 ` [Buildroot] [PATCH v1 2/2] support/scripts/pkg-stats: optimize CSS selector usage Sen Hastings
2022-08-30 6:34 ` Sen Hastings
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220805200114.288208-2-sen@phobosdpl.com \
--to=sen@phobosdpl.com \
--cc=buildroot@buildroot.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.