aboutsummaryrefslogtreecommitdiffstats
path: root/dashboard/app/cache.go
Commit message (Collapse)AuthorAgeFilesLines
* dashboard/app: don't treat memcache.ErrNotStored as an errorDmitry Vyukov2026-01-191-1/+1
| | | | | We have a bunch of "failed to throttle: memcache: item not stored" errors in logs. It seems that the cache item is evicted before we do CompareAndSwap.
* dashboard: export missing backports as jsonAleksandr Nogikh2024-09-121-5/+5
| | | | | Also include more information into the output: kernel config and reproducer links.
* all: fix up context import after go fixDmitry Vyukov2024-04-261-1/+1
|
* all: go fix everythingDmitry Vyukov2024-04-261-1/+1
|
* dashboard: don't print error on high memcache contentionAleksandr Nogikh2023-11-221-1/+4
| | | | | At peak load times, it can be expected that CAS will require too many iterations. There's no reason to report it as an error.
* dashboard: optimize throttlingAleksandr Nogikh2023-11-081-2/+8
| | | | | | | | At the peak times, concurrency at individual keys can be high. Do the updates more carefully - if we denied the request and another instance did the same concurrently, there's no point in retrying the write. The object stored at the key already exceeds the limit.
* dashboard: throttle incoming requestsAleksandr Nogikh2023-11-031-0/+67
| | | | | To ensure service stability, let's rate limit incoming requests to our web endpoints.
* dashboard: cache managers lists on the main pageAleksandr Nogikh2023-10-311-2/+15
| | | | | | | | This is a relatively expensive operation (hundreds of ms) that queries many types of entities. At the same time, the content does not change that often. Cache it for 5 minutes after querying.
* dashboard: create a generic cache helper functionAleksandr Nogikh2023-10-311-8/+15
| | | | This will simplify caching of other dashboard output pieces.
* dashboard: cache per-ns manager listsAleksandr Nogikh2023-10-251-0/+28
| | | | | | | | | | The query may take up to 100ms in some cases, while the result changes on quite rare occasions. Let's use a cached version of the data when rendering UI pages. We don't need extra tests because it's already excercised in existing tests that trigger web endpoints.
* dashboard: optionally cache displayed bug groupsAleksandr Nogikh2023-10-231-1/+74
| | | | | | | | | | | | | | | | For upstream Linux namespace, it sometimes takes up to 5-10 seconds to load the main page. That is too much and the reason for this is datastore not being intended for frequent querying of thousands of entities from the database. Let's take a step forward and at least cache the bugs we display on the main page. Once in a minute, query them for all access levels, compress and save to the memcached. Only do it for non-filtered bugs, because otherwise it works fast enough. As the next step we could also take care of terminal pages.
* dashboard: access config through contextAleksandr Nogikh2023-10-121-3/+3
| | | | | | | | | | | | | | | | | | | | | We used to have a single global `config` variable and access it throughout the whole dashboard application. However, this approach has been more and more complicated test writing -- sometimes we want the config to be only slightly different, so that it's not worth it adding new namespaces, sometimes we have to test how dashboard handles config changes over time. This has already led to a number of hacky contextWithXXX methods that mocked various parts of the global variable. The rest of the code had to sometimes still use `config` directly and sometimes invoke getXXX(c) methods. This is very inconsistent and prone to errors. With more and more situations where we need to patch the config appearing (see #4118), let's refactor the application to always access config via the getConfig(c) method. This allows us to uniformly patch the config and be sure that the non-patched copy is not accessible from anywhere else.
* dashboard: display backport listsAleksandr Nogikh2023-08-231-6/+28
| | | | | | | Add a per-namespace page that contains: 1) The list of commits to backport from the trees fuzzed in that namespace. 2) The list of commits to backport into the namespace.
* dashboard: support bug labelsAleksandr Nogikh2023-04-271-4/+5
| | | | | | | | | | | | | | | | Let bug labels come in three flavours: 1) Bug labels with multiple values (e.g. `subsystems`). 2) Bug labels with only one value (e.g. `prio`). 3) Flags. Let users configure bug labels via email by issuing the following commands: #syz set subsystems: abc, def #syz set no-reminders #syz unset no-reminders Also let users set tags for invididual bugs in reported bug lists: #syz set <1> some-tag
* dashboard: filter by no subsystemsAleksandr Nogikh2023-02-221-2/+6
| | | | | Count the number of bugs without any subsystem and let users filter bugs by this criteria.
* dashboard: cache per-subsystem statsAleksandr Nogikh2023-02-171-15/+31
| | | | For each subsystem, collect the number of open, fixed and invalid bugs.
* dashboard/app: update to go116 (#2959)Taras Madan2022-01-051-3/+3
| | | | | | 1. Updated the "include"s. 2. No logs read API in the AppEngine anymore. Replaced by the GCP logging API. 3. Use "GO111MODULE=off gcloud beta app deploy ./dashboard/app/app.yaml --no-promote" to test new deployment. 4. Updated the documentation.
* dashboard/app: update memcache with cronDmitry Vyukov2021-03-261-16/+38
| | | | | | Building the memcache object with bug stats takes significant time and periodically slows down user requests. Update it with cron ahead of time.
* dashboard/app: cache per-namespace bug statsDmitry Vyukov2020-07-091-0/+70
We used to show number of fixed bugs at the top of the main page. However, now with the button nagivation, "fixed" is shown on every page. Fetching and processing all bugs on every page would be unwise. Cache these stats in memcache. It will be useful to show more stats in future.