dotCMS / dotCMS/core

per Request based accounting - calculate cost for each request

Open
#32,886 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

dotCMS : Architecture dotCMS : Metrics dotCMS : Technical Debt
Dominant language
Java
Stars
970
Forks
486
Avg merge
3d 33m
Merged PRs (30d)
170

Description

Problem Statement

All requests are not created equal. Each have varying levels of complexity, which makes limiting an installation by numbers of requests difficult. For example, You can do an grapqhl query that returns a single title from 1 contentlet, which is nice and light, or you can run a grapqhl query that pulls 1000 contentlets and recurses 5 relationships deep on them all of them. Likewise, you can have a velocity page that renders a page with 2 simple pieces of content or one that pulls a content list and renders 250 of them. These requests, while all single requests, are not the same in regards to processing power, memory and db/es resources needed to service them.

We need a (granted imperfect) way to surface a synthetic cost per request. It can be reported various ways - as a header, in the access logs, etc but we should have an algorithm that does an estimate on the weight of any given request.

We should develop a "cost sheet" that outlines the costs for various actions and then we should add an accounting mechanism in the tool that automatically accrues the cost per request and surfaces it to the user.

Steps to Reproduce

Hitting dotCMS with various requests takes various horsepower.

Acceptance Criteria

We should include a header or a column in a log that reports on request cost.

dotCMS Version

latest

Proposed Objective

Application Performance

Proposed Priority

Priority 2 - Important

External Links... Slack Conversations, Support Tickets, Figma Designs, etc.

No response

Assumptions & Initiation Needs

No response

Quality Assurance Notes & Workarounds

No response

Sub-Tasks & Estimates

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

No files, tests, or entry points are named. Start by locating the request paths for GraphQL and Velocity and the access-log or response-header mechanisms; done means an agreed cost sheet, per-request accounting, and a reported cost validated against requests of varying complexity.

Written by the indexing model from the issue text.

Assessment

Tech stack
graphql, java
Domain
backend-api-design, observability, performance
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.