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 21:02:17 UTC

[trafficcontrol] branch 6.0.x updated (32943cc -> a8e0c29)

This is an automated email from the ASF dual-hosted git repository.

zrhoffman pushed a change to branch 6.0.x
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git.


 discard 32943cc  Removed default limits values in logs API (#6235) (#6241)
     new a8e0c29  Removed default limits values in logs API (#6235) (#6241)

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (32943cc)
            \
             N -- N -- N   refs/heads/6.0.x (a8e0c29)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:

[trafficcontrol] 01/01: Removed default limits values in logs API (#6235) (#6241)

Posted by zr...@apache.org.
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

commit a8e0c2967c9f54d527ad8b5932f0d1f9bc1eae2d
Author: dmohan001c <de...@comcast.com>
AuthorDate: Tue Sep 28 14:59:36 2021 -0600

    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