Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
491859bb
Unverified
Commit
491859bb
authored
Jan 05, 2023
by
boojack
Committed by
GitHub
Jan 05, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: update activity metrics (#908)
parent
f16123a6
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
76 additions
and
43 deletions
+76
-43
collector.go
plugin/metrics/collector.go
+8
-0
metric.go
plugin/metrics/metric.go
+0
-7
collector.go
plugin/metrics/segment/collector.go
+12
-9
auth.go
server/auth.go
+9
-2
memo.go
server/memo.go
+5
-1
metric_collector.go
server/metric_collector.go
+21
-14
resource.go
server/resource.go
+5
-1
server.go
server/server.go
+9
-7
user.go
server/user.go
+5
-1
activity.go
store/activity.go
+2
-1
No files found.
plugin/metrics/collector.go
View file @
491859bb
package
metric
package
metric
// Metric is the API message for metric.
type
Metric
struct
{
ID
string
Name
string
Labels
map
[
string
]
string
}
// Collector is the interface definition for metric collector.
// Collector is the interface definition for metric collector.
type
Collector
interface
{
type
Collector
interface
{
Identify
(
id
string
)
error
Collect
(
metric
*
Metric
)
error
Collect
(
metric
*
Metric
)
error
}
}
plugin/metrics/metric.go
deleted
100644 → 0
View file @
f16123a6
package
metric
// Metric is the API message for metric.
type
Metric
struct
{
Name
string
Labels
map
[
string
]
string
}
plugin/metrics/segment/collector.go
View file @
491859bb
...
@@ -3,15 +3,10 @@ package segment
...
@@ -3,15 +3,10 @@ package segment
import
(
import
(
"time"
"time"
"github.com/google/uuid"
"github.com/segmentio/analytics-go"
"github.com/segmentio/analytics-go"
metric
"github.com/usememos/memos/plugin/metrics"
metric
"github.com/usememos/memos/plugin/metrics"
)
)
var
(
sessionUUID
=
uuid
.
NewString
()
)
// collector is the metrics collector https://segment.com/.
// collector is the metrics collector https://segment.com/.
type
collector
struct
{
type
collector
struct
{
client
analytics
.
Client
client
analytics
.
Client
...
@@ -26,6 +21,14 @@ func NewCollector(key string) metric.Collector {
...
@@ -26,6 +21,14 @@ func NewCollector(key string) metric.Collector {
}
}
}
}
// Identify will identify the server caller.
func
(
c
*
collector
)
Identify
(
id
string
)
error
{
return
c
.
client
.
Enqueue
(
analytics
.
Identify
{
UserId
:
id
,
Timestamp
:
time
.
Now
()
.
UTC
(),
})
}
// Collect will exec all the segment collector.
// Collect will exec all the segment collector.
func
(
c
*
collector
)
Collect
(
metric
*
metric
.
Metric
)
error
{
func
(
c
*
collector
)
Collect
(
metric
*
metric
.
Metric
)
error
{
properties
:=
analytics
.
NewProperties
()
properties
:=
analytics
.
NewProperties
()
...
@@ -34,9 +37,9 @@ func (c *collector) Collect(metric *metric.Metric) error {
...
@@ -34,9 +37,9 @@ func (c *collector) Collect(metric *metric.Metric) error {
}
}
return
c
.
client
.
Enqueue
(
analytics
.
Track
{
return
c
.
client
.
Enqueue
(
analytics
.
Track
{
Event
:
string
(
metric
.
Name
)
,
UserId
:
metric
.
ID
,
AnonymousId
:
sessionUUID
,
Timestamp
:
time
.
Now
()
.
UTC
()
,
Properties
:
properties
,
Event
:
metric
.
Name
,
Timestamp
:
time
.
Now
()
.
UTC
()
,
Properties
:
properties
,
})
})
}
}
server/auth.go
View file @
491859bb
...
@@ -8,6 +8,7 @@ import (
...
@@ -8,6 +8,7 @@ import (
"github.com/pkg/errors"
"github.com/pkg/errors"
"github.com/usememos/memos/api"
"github.com/usememos/memos/api"
"github.com/usememos/memos/common"
"github.com/usememos/memos/common"
metric
"github.com/usememos/memos/plugin/metrics"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4"
"golang.org/x/crypto/bcrypt"
"golang.org/x/crypto/bcrypt"
...
@@ -150,12 +151,15 @@ func (s *Server) createUserAuthSignInActivity(c echo.Context, user *api.User) er
...
@@ -150,12 +151,15 @@ func (s *Server) createUserAuthSignInActivity(c echo.Context, user *api.User) er
if
err
!=
nil
{
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
}
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
activity
,
err
:
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
user
.
ID
,
CreatorID
:
user
.
ID
,
Type
:
api
.
ActivityUserAuthSignIn
,
Type
:
api
.
ActivityUserAuthSignIn
,
Level
:
api
.
ActivityInfo
,
Level
:
api
.
ActivityInfo
,
Payload
:
string
(
payloadStr
),
Payload
:
string
(
payloadStr
),
})
})
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
string
(
activity
.
Type
),
})
return
err
return
err
}
}
...
@@ -169,11 +173,14 @@ func (s *Server) createUserAuthSignUpActivity(c echo.Context, user *api.User) er
...
@@ -169,11 +173,14 @@ func (s *Server) createUserAuthSignUpActivity(c echo.Context, user *api.User) er
if
err
!=
nil
{
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
}
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
activity
,
err
:
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
user
.
ID
,
CreatorID
:
user
.
ID
,
Type
:
api
.
ActivityUserAuthSignUp
,
Type
:
api
.
ActivityUserAuthSignUp
,
Level
:
api
.
ActivityInfo
,
Level
:
api
.
ActivityInfo
,
Payload
:
string
(
payloadStr
),
Payload
:
string
(
payloadStr
),
})
})
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
string
(
activity
.
Type
),
})
return
err
return
err
}
}
server/memo.go
View file @
491859bb
...
@@ -12,6 +12,7 @@ import (
...
@@ -12,6 +12,7 @@ import (
"github.com/pkg/errors"
"github.com/pkg/errors"
"github.com/usememos/memos/api"
"github.com/usememos/memos/api"
"github.com/usememos/memos/common"
"github.com/usememos/memos/common"
metric
"github.com/usememos/memos/plugin/metrics"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4"
)
)
...
@@ -576,11 +577,14 @@ func (s *Server) createMemoCreateActivity(c echo.Context, memo *api.Memo) error
...
@@ -576,11 +577,14 @@ func (s *Server) createMemoCreateActivity(c echo.Context, memo *api.Memo) error
if
err
!=
nil
{
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
}
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
activity
,
err
:
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
memo
.
CreatorID
,
CreatorID
:
memo
.
CreatorID
,
Type
:
api
.
ActivityMemoCreate
,
Type
:
api
.
ActivityMemoCreate
,
Level
:
api
.
ActivityInfo
,
Level
:
api
.
ActivityInfo
,
Payload
:
string
(
payloadStr
),
Payload
:
string
(
payloadStr
),
})
})
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
string
(
activity
.
Type
),
})
return
err
return
err
}
}
server/metric_collector.go
View file @
491859bb
...
@@ -8,47 +8,54 @@ import (
...
@@ -8,47 +8,54 @@ import (
"github.com/usememos/memos/plugin/metrics/segment"
"github.com/usememos/memos/plugin/metrics/segment"
"github.com/usememos/memos/server/profile"
"github.com/usememos/memos/server/profile"
"github.com/usememos/memos/server/version"
"github.com/usememos/memos/server/version"
"github.com/usememos/memos/store"
)
)
// MetricCollector is the metric collector.
// MetricCollector is the metric collector.
type
MetricCollector
struct
{
type
MetricCollector
struct
{
Collector
metric
.
Collector
collector
metric
.
Collector
ID
string
Enabled
bool
Enabled
bool
Profile
*
profile
.
Profile
Profile
*
profile
.
Profile
Store
*
store
.
Store
}
}
const
(
const
(
segmentMetricWriteKey
=
"
fTn5BumOkj352n3TGw9tu0ARH2dOkcoQ
"
segmentMetricWriteKey
=
"
NbPruMMmfqfD2AMCw3pkxZTsszVS3hKq
"
)
)
func
NewMetricCollector
(
profile
*
profile
.
Profile
,
store
*
store
.
Store
)
MetricCollector
{
func
(
s
*
Server
)
registerMetricCollector
()
{
c
:=
segment
.
NewCollector
(
segmentMetricWriteKey
)
c
:=
segment
.
NewCollector
(
segmentMetricWriteKey
)
mc
:=
&
MetricCollector
{
return
MetricCollector
{
collector
:
c
,
Collector
:
c
,
ID
:
s
.
ID
,
Enabled
:
true
,
Enabled
:
true
,
Profile
:
profile
,
Profile
:
s
.
Profile
,
Store
:
store
,
}
}
s
.
Collector
=
mc
}
}
func
(
mc
*
MetricCollector
)
Collect
(
_
context
.
Context
,
metric
*
metric
.
Metric
)
{
func
(
mc
*
MetricCollector
)
Identify
(
_
context
.
Context
)
{
if
!
mc
.
Enabled
{
if
!
mc
.
Enabled
{
return
return
}
}
if
mc
.
Profile
.
Mode
==
"dev"
{
err
:=
mc
.
collector
.
Identify
(
mc
.
ID
)
if
err
!=
nil
{
fmt
.
Printf
(
"Failed to request segment, error: %+v
\n
"
,
err
)
}
}
func
(
mc
*
MetricCollector
)
Collect
(
_
context
.
Context
,
metric
*
metric
.
Metric
)
{
if
!
mc
.
Enabled
{
return
return
}
}
if
metric
.
Labels
==
nil
{
if
metric
.
Labels
==
nil
{
metric
.
Labels
=
map
[
string
]
string
{}
metric
.
Labels
=
map
[
string
]
string
{}
}
}
metric
.
Labels
[
"mode"
]
=
mc
.
Profile
.
Mode
metric
.
Labels
[
"version"
]
=
version
.
GetCurrentVersion
(
mc
.
Profile
.
Mode
)
metric
.
Labels
[
"version"
]
=
version
.
GetCurrentVersion
(
mc
.
Profile
.
Mode
)
metric
.
ID
=
mc
.
ID
err
:=
mc
.
C
ollector
.
Collect
(
metric
)
err
:=
mc
.
c
ollector
.
Collect
(
metric
)
if
err
!=
nil
{
if
err
!=
nil
{
fmt
.
Printf
(
"Failed to request segment, error: %+v
\n
"
,
err
)
fmt
.
Printf
(
"Failed to request segment, error: %+v
\n
"
,
err
)
}
}
...
...
server/resource.go
View file @
491859bb
...
@@ -12,6 +12,7 @@ import (
...
@@ -12,6 +12,7 @@ import (
"github.com/pkg/errors"
"github.com/pkg/errors"
"github.com/usememos/memos/api"
"github.com/usememos/memos/api"
"github.com/usememos/memos/common"
"github.com/usememos/memos/common"
metric
"github.com/usememos/memos/plugin/metrics"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4"
)
)
...
@@ -287,11 +288,14 @@ func (s *Server) createResourceCreateActivity(c echo.Context, resource *api.Reso
...
@@ -287,11 +288,14 @@ func (s *Server) createResourceCreateActivity(c echo.Context, resource *api.Reso
if
err
!=
nil
{
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
}
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
activity
,
err
:
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
resource
.
CreatorID
,
CreatorID
:
resource
.
CreatorID
,
Type
:
api
.
ActivityResourceCreate
,
Type
:
api
.
ActivityResourceCreate
,
Level
:
api
.
ActivityInfo
,
Level
:
api
.
ActivityInfo
,
Payload
:
string
(
payloadStr
),
Payload
:
string
(
payloadStr
),
})
})
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
string
(
activity
.
Type
),
})
return
err
return
err
}
}
server/server.go
View file @
491859bb
...
@@ -8,6 +8,7 @@ import (
...
@@ -8,6 +8,7 @@ import (
"github.com/pkg/errors"
"github.com/pkg/errors"
"github.com/usememos/memos/api"
"github.com/usememos/memos/api"
metric
"github.com/usememos/memos/plugin/metrics"
"github.com/usememos/memos/server/profile"
"github.com/usememos/memos/server/profile"
"github.com/usememos/memos/store"
"github.com/usememos/memos/store"
"github.com/usememos/memos/store/db"
"github.com/usememos/memos/store/db"
...
@@ -46,11 +47,6 @@ func NewServer(ctx context.Context, profile *profile.Profile) (*Server, error) {
...
@@ -46,11 +47,6 @@ func NewServer(ctx context.Context, profile *profile.Profile) (*Server, error) {
storeInstance
:=
store
.
New
(
db
.
DBInstance
,
profile
)
storeInstance
:=
store
.
New
(
db
.
DBInstance
,
profile
)
s
.
Store
=
storeInstance
s
.
Store
=
storeInstance
metricCollector
:=
NewMetricCollector
(
profile
,
storeInstance
)
// Disable metrics collector.
metricCollector
.
Enabled
=
false
s
.
Collector
=
&
metricCollector
e
.
Use
(
middleware
.
LoggerWithConfig
(
middleware
.
LoggerConfig
{
e
.
Use
(
middleware
.
LoggerWithConfig
(
middleware
.
LoggerConfig
{
Format
:
`{"time":"${time_rfc3339}",`
+
Format
:
`{"time":"${time_rfc3339}",`
+
`"method":"${method}","uri":"${uri}",`
+
`"method":"${method}","uri":"${uri}",`
+
...
@@ -93,6 +89,9 @@ func NewServer(ctx context.Context, profile *profile.Profile) (*Server, error) {
...
@@ -93,6 +89,9 @@ func NewServer(ctx context.Context, profile *profile.Profile) (*Server, error) {
embedFrontend
(
e
)
embedFrontend
(
e
)
// Register MetricCollector to server.
s
.
registerMetricCollector
()
rootGroup
:=
e
.
Group
(
""
)
rootGroup
:=
e
.
Group
(
""
)
s
.
registerRSSRoutes
(
rootGroup
)
s
.
registerRSSRoutes
(
rootGroup
)
...
@@ -122,7 +121,7 @@ func (s *Server) Run(ctx context.Context) error {
...
@@ -122,7 +121,7 @@ func (s *Server) Run(ctx context.Context) error {
if
err
:=
s
.
createServerStartActivity
(
ctx
);
err
!=
nil
{
if
err
:=
s
.
createServerStartActivity
(
ctx
);
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to create activity"
)
return
errors
.
Wrap
(
err
,
"failed to create activity"
)
}
}
s
.
Collector
.
Identify
(
ctx
)
return
s
.
e
.
Start
(
fmt
.
Sprintf
(
":%d"
,
s
.
Profile
.
Port
))
return
s
.
e
.
Start
(
fmt
.
Sprintf
(
":%d"
,
s
.
Profile
.
Port
))
}
}
...
@@ -135,11 +134,14 @@ func (s *Server) createServerStartActivity(ctx context.Context) error {
...
@@ -135,11 +134,14 @@ func (s *Server) createServerStartActivity(ctx context.Context) error {
if
err
!=
nil
{
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
}
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
activity
,
err
:
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
api
.
UnknownID
,
CreatorID
:
api
.
UnknownID
,
Type
:
api
.
ActivityServerStart
,
Type
:
api
.
ActivityServerStart
,
Level
:
api
.
ActivityInfo
,
Level
:
api
.
ActivityInfo
,
Payload
:
string
(
payloadStr
),
Payload
:
string
(
payloadStr
),
})
})
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
string
(
activity
.
Type
),
})
return
err
return
err
}
}
server/user.go
View file @
491859bb
...
@@ -10,6 +10,7 @@ import (
...
@@ -10,6 +10,7 @@ import (
"github.com/pkg/errors"
"github.com/pkg/errors"
"github.com/usememos/memos/api"
"github.com/usememos/memos/api"
"github.com/usememos/memos/common"
"github.com/usememos/memos/common"
metric
"github.com/usememos/memos/plugin/metrics"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4"
"golang.org/x/crypto/bcrypt"
"golang.org/x/crypto/bcrypt"
...
@@ -289,11 +290,14 @@ func (s *Server) createUserCreateActivity(c echo.Context, user *api.User) error
...
@@ -289,11 +290,14 @@ func (s *Server) createUserCreateActivity(c echo.Context, user *api.User) error
if
err
!=
nil
{
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
}
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
activity
,
err
:
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
user
.
ID
,
CreatorID
:
user
.
ID
,
Type
:
api
.
ActivityUserCreate
,
Type
:
api
.
ActivityUserCreate
,
Level
:
api
.
ActivityInfo
,
Level
:
api
.
ActivityInfo
,
Payload
:
string
(
payloadStr
),
Payload
:
string
(
payloadStr
),
})
})
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
string
(
activity
.
Type
),
})
return
err
return
err
}
}
store/activity.go
View file @
491859bb
...
@@ -57,7 +57,8 @@ func (s *Store) CreateActivity(ctx context.Context, create *api.ActivityCreate)
...
@@ -57,7 +57,8 @@ func (s *Store) CreateActivity(ctx context.Context, create *api.ActivityCreate)
return
nil
,
FormatError
(
err
)
return
nil
,
FormatError
(
err
)
}
}
return
activityRaw
.
toActivity
(),
nil
activity
:=
activityRaw
.
toActivity
()
return
activity
,
nil
}
}
// createActivity creates a new activity.
// createActivity creates a new activity.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment