Skip to content

Commit

Permalink
feat: Added pagination support to environments endpoint (#1665)
Browse files Browse the repository at this point in the history
Co-authored-by: Nilver Viera <nviera@itosupport.com>
Co-authored-by: Nick Satterly <nfsatterly@gmail.com>
  • Loading branch information
3 people committed Dec 21, 2023
1 parent b3be6b1 commit 4664cd2
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 8 deletions.
14 changes: 11 additions & 3 deletions alerta/database/backends/postgres/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -632,14 +632,14 @@ def get_topn_standing(self, query=None, topn=100):

# ENVIRONMENTS

def get_environments(self, query=None, topn=1000):
def get_environments(self, query=None, page=None, page_size=None):
query = query or Query()
select = f"""
SELECT environment, severity, status, count(1) FROM alerts
WHERE {query.where}
GROUP BY environment, CUBE(severity, status)
"""
result = self._fetchall(select, query.vars, limit=topn)
result = self._fetchall(select, query.vars, limit=page_size)

severity_count = defaultdict(list)
status_count = defaultdict(list)
Expand All @@ -654,7 +654,7 @@ def get_environments(self, query=None, topn=1000):
total_count[row.environment] = row.count

select = """SELECT DISTINCT environment FROM alerts"""
environments = self._fetchall(select, {})
environments = self._fetchall(select, {}, limit=page_size, offset=(page - 1) * page_size)
return [
{
'environment': e.environment,
Expand All @@ -663,6 +663,14 @@ def get_environments(self, query=None, topn=1000):
'count': total_count[e.environment]
} for e in environments]

def get_environments_count(self, query=None):
query = query or Query()
select = """
SELECT COUNT(DISTINCT environment) FROM alerts
WHERE {where}
""".format(where=query.where)
return self._fetchone(select, query.vars).count

# SERVICES

def get_services(self, query=None, topn=1000):
Expand Down
5 changes: 4 additions & 1 deletion alerta/database/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,10 @@ def get_topn_standing(self, query, group='event', topn=100):

# ENVIRONMENTS

def get_environments(self, query=None, topn=1000):
def get_environments(self, query=None, page=1, page_size=100):
raise NotImplementedError

def get_environments_count(query: Query = None) -> int:
raise NotImplementedError

# SERVICES
Expand Down
8 changes: 6 additions & 2 deletions alerta/models/alert.py
Original file line number Diff line number Diff line change
Expand Up @@ -542,8 +542,12 @@ def get_topn_standing(query: Query = None, topn: int = 10) -> List[Dict[str, Any

# get environments
@staticmethod
def get_environments(query: Query = None) -> List[str]:
return db.get_environments(query)
def get_environments(query: Query = None, page: int = 1, page_size: int = 100) -> List[str]:
return db.get_environments(query, page, page_size)

@staticmethod
def get_environments_count(query: Query = None) -> int:
return db.get_environments_count(query)

# get services
@staticmethod
Expand Down
15 changes: 13 additions & 2 deletions alerta/views/alerts.py
Original file line number Diff line number Diff line change
Expand Up @@ -480,19 +480,30 @@ def get_topn_standing():
@jsonp
def get_environments():
query = qb.alerts.from_params(request.args, customers=g.customers)
environments = Alert.get_environments(query)
total = Alert.get_environments_count(query)
paging = Page.from_params(request.args, total)
environments = Alert.get_environments(query, page=paging.page, page_size=paging.page_size)

if environments:
return jsonify(
status='ok',
environments=environments,
total=len(environments)
page=paging.page,
pageSize=paging.page_size,
pages=paging.pages,
more=paging.has_more,
total=total

)
else:
return jsonify(
status='ok',
message='not found',
environments=[],
page=paging.page,
pageSize=paging.page_size,
pages=paging.pages,
more=paging.has_more,
total=0
)

Expand Down

0 comments on commit 4664cd2

Please sign in to comment.