You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by zr...@apache.org on 2021/09/28 20:57:05 UTC
[trafficcontrol] branch 6.0.x updated: Removed default limits
values in logs API (#6235) (#6241)
This is an automated email from the ASF dual-hosted git repository.
zrhoffman pushed a commit to branch 6.0.x
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git
The following commit(s) were added to refs/heads/6.0.x by this push:
new 32943cc Removed default limits values in logs API (#6235) (#6241)
32943cc is described below
commit 32943ccb45005a9fa966c76a30d17206207474bc
Author: Zach Hoffman <zr...@apache.org>
AuthorDate: Tue Sep 28 20:56:57 2021 +0000
Removed default limits values in logs API (#6235) (#6241)
* removed limit default values
* print statements added
* removed the default limit values for the log
* updated the docs for logs limit functionality
* removed default values in logs only for V4
* removed default limits if the days query params are passed in V2 and V3
* added the docs for logs - limit query params
* removed write alerts and renamed to Handle err
(cherry picked from commit 2977937ed17a8a208f751ece446b53407820ca04)
Co-authored-by: dmohan001c <de...@comcast.com>
---
docs/source/api/v2/logs.rst | 4 +-
docs/source/api/v3/logs.rst | 4 +-
docs/source/api/v4/logs.rst | 2 +-
traffic_ops/traffic_ops_golang/logs/log.go | 79 +++++++++++++++++++++++-
traffic_ops/traffic_ops_golang/routing/routes.go | 2 +-
5 files changed, 83 insertions(+), 8 deletions(-)
diff --git a/docs/source/api/v2/logs.rst b/docs/source/api/v2/logs.rst
index 442efa3..33da628 100644
--- a/docs/source/api/v2/logs.rst
+++ b/docs/source/api/v2/logs.rst
@@ -35,9 +35,9 @@ Request Structure
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------+
| Name | Required | Description |
+===========+==========+=====================================================================================================================================+
- | days | no | An integer number of days of change logs to return |
+ | days | no | An integer number of days of change logs to return, by default there is no limit applied |
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------+
- | limit | no | The number of records to which to limit the response |
+ | limit | no | The number of records to which to limit the response, if there is no limit query params, it limits to 1000 |
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------+
| offset | no | The number of results to skip before beginning to return results. Must use in conjunction with limit |
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------+
diff --git a/docs/source/api/v3/logs.rst b/docs/source/api/v3/logs.rst
index 2a1ddf5..6728733 100644
--- a/docs/source/api/v3/logs.rst
+++ b/docs/source/api/v3/logs.rst
@@ -35,9 +35,9 @@ Request Structure
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------+
| Name | Required | Description |
+===========+==========+=====================================================================================================================================+
- | days | no | An integer number of days of change logs to return |
+ | days | no | An integer number of days of change logs to return, by default there is no limit applied |
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------+
- | limit | no | The number of records to which to limit the response |
+ | limit | no | The number of records to which to limit the response, if there is no limit query params, it limits to 1000 |
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------+
| offset | no | The number of results to skip before beginning to return results. Must use in conjunction with limit |
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------+
diff --git a/docs/source/api/v4/logs.rst b/docs/source/api/v4/logs.rst
index 74ee027..ac7ce82 100644
--- a/docs/source/api/v4/logs.rst
+++ b/docs/source/api/v4/logs.rst
@@ -37,7 +37,7 @@ Request Structure
+===========+==========+=====================================================================================================================================+
| days | no | An integer number of days of change logs to return |
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------+
- | limit | no | The number of records to which to limit the response |
+ | limit | no | The number of records to which to limit the response, by default there is no limit applied |
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------+
| offset | no | The number of results to skip before beginning to return results. Must use in conjunction with limit |
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------+
diff --git a/traffic_ops/traffic_ops_golang/logs/log.go b/traffic_ops/traffic_ops_golang/logs/log.go
index c8c5569..25cbb9a 100644
--- a/traffic_ops/traffic_ops_golang/logs/log.go
+++ b/traffic_ops/traffic_ops_golang/logs/log.go
@@ -63,10 +63,32 @@ func Get(w http.ResponseWriter, r *http.Request) {
if pLimit, ok := inf.IntParams["limit"]; ok {
limit = pLimit
}
+ setLastSeenCookie(w)
+ logs, count, err := getLog(inf, days, limit)
+ if err != nil {
+ api.HandleErr(w, r, inf.Tx.Tx, http.StatusInternalServerError, err, err)
+ return
+ }
+ api.WriteRespWithSummary(w, r, logs, count)
+}
+
+// Get is the handler for GET requests to /logs V4.0.
+func Getv40(w http.ResponseWriter, r *http.Request) {
+ inf, userErr, sysErr, errCode := api.NewInfo(r, nil, []string{"days", "limit"})
+ if userErr != nil || sysErr != nil {
+ api.HandleErr(w, r, inf.Tx.Tx, errCode, userErr, sysErr)
+ return
+ }
+ defer inf.Close()
+ days := DefaultLogDays
+ if pDays, ok := inf.IntParams["days"]; ok {
+ days = pDays
+ }
a := tc.Alerts{}
setLastSeenCookie(w)
- logs, count, err := getLog(inf, days, limit)
+ logs, count, err := getLogV40(inf, days)
+
if err != nil {
a.AddNewAlert(tc.ErrorLevel, err.Error())
api.WriteAlerts(w, r, http.StatusInternalServerError, a)
@@ -135,11 +157,64 @@ FROM "log" as l JOIN tm_user as u ON l.tm_user = u.id`
const countQuery = `SELECT count(l.tm_user) FROM log as l`
+func getLogV40(inf *api.APIInfo, days int) ([]tc.Log, uint64, error) {
+ var count = uint64(0)
+ var whereCount string
+
+ queryParamsToQueryCols := map[string]dbhelpers.WhereColumnInfo{
+ "username": {Column: "u.username", Checker: nil},
+ }
+ where, _, pagination, queryValues, errs :=
+ dbhelpers.BuildWhereAndOrderByAndPagination(inf.Params, queryParamsToQueryCols)
+
+ if len(errs) > 0 {
+ return nil, 0, util.JoinErrs(errs)
+ }
+
+ timeInterval := fmt.Sprintf("l.last_updated > now() - INTERVAL '%d' DAY", days)
+ if where != "" {
+ whereCount = ", tm_user as u\n" + where + " AND l.tm_user = u.id"
+ where = where + " AND " + timeInterval
+ } else {
+ whereCount = where
+ where = "\nWHERE " + timeInterval
+ }
+ queryCount := countQuery + whereCount
+ rowCount, err := inf.Tx.NamedQuery(queryCount, queryValues)
+ if err != nil {
+ return nil, count, fmt.Errorf("querying log count for a given user: %w", err)
+ }
+ defer rowCount.Close()
+ for rowCount.Next() {
+ if err = rowCount.Scan(&count); err != nil {
+ return nil, count, fmt.Errorf("scanning logs: %w", err)
+ }
+ }
+
+ query := selectFromQuery + where + "\n ORDER BY last_updated DESC" + pagination
+ rows, err := inf.Tx.NamedQuery(query, queryValues)
+ if err != nil {
+ return nil, count, fmt.Errorf("querying logs: %w", err)
+ }
+ defer rows.Close()
+ ls := []tc.Log{}
+ for rows.Next() {
+ l := tc.Log{}
+ if err = rows.Scan(&l.ID, &l.Level, &l.Message, &l.User, &l.TicketNum, &l.LastUpdated); err != nil {
+ return nil, count, fmt.Errorf("scanning logs: %w", err)
+ }
+ ls = append(ls, l)
+ }
+ return ls, count, nil
+}
+
func getLog(inf *api.APIInfo, days int, limit int) ([]tc.Log, uint64, error) {
var count = uint64(0)
var whereCount string
if _, ok := inf.Params["limit"]; !ok {
- inf.Params["limit"] = strconv.Itoa(DefaultLogLimit)
+ if _, ok := inf.Params["days"]; !ok {
+ inf.Params["limit"] = strconv.Itoa(DefaultLogLimit)
+ }
} else {
inf.Params["limit"] = strconv.Itoa(limit)
}
diff --git a/traffic_ops/traffic_ops_golang/routing/routes.go b/traffic_ops/traffic_ops_golang/routing/routes.go
index 9ae855b..5a8170c 100644
--- a/traffic_ops/traffic_ops_golang/routing/routes.go
+++ b/traffic_ops/traffic_ops_golang/routing/routes.go
@@ -216,7 +216,7 @@ func Routes(d ServerData) ([]Route, []RawRoute, http.Handler, error) {
{api.Version{Major: 4, Minor: 0}, http.MethodPost, `divisions/?$`, api.CreateHandler(&division.TODivision{}), auth.PrivLevelOperations, Authenticated, nil, 4537138003},
{api.Version{Major: 4, Minor: 0}, http.MethodDelete, `divisions/{id}$`, api.DeleteHandler(&division.TODivision{}), auth.PrivLevelOperations, Authenticated, nil, 43253822373},
- {api.Version{Major: 4, Minor: 0}, http.MethodGet, `logs/?$`, logs.Get, auth.PrivLevelReadOnly, Authenticated, nil, 4483405503},
+ {api.Version{Major: 4, Minor: 0}, http.MethodGet, `logs/?$`, logs.Getv40, auth.PrivLevelReadOnly, Authenticated, nil, 4483405503},
{api.Version{Major: 4, Minor: 0}, http.MethodGet, `logs/newcount/?$`, logs.GetNewCount, auth.PrivLevelReadOnly, Authenticated, nil, 44058330123},
//Content invalidation jobs