Skip to content

Commit 730dc9f

Browse files
authored
added basic telemtry tracking WIP (#53)
1 parent 65fb751 commit 730dc9f

File tree

5 files changed

+72
-1
lines changed

5 files changed

+72
-1
lines changed

blockchain/projects.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"fmt"
2424
"github.com/dapperlabs/flow-playground-api/model"
2525
"github.com/dapperlabs/flow-playground-api/storage"
26+
playground "github.com/dapperlabs/flow-playground-api/telemetry"
2627

2728
"github.com/getsentry/sentry-go"
2829
"github.com/google/uuid"
@@ -57,22 +58,27 @@ type Projects struct {
5758
// Reset the blockchain state.
5859
func (p *Projects) Reset(project *model.InternalProject) ([]*model.InternalAccount, error) {
5960
p.cache.reset(project.ID)
61+
playground.Logger().Info("[projects] reset - start")
6062

6163
err := p.store.ResetProjectState(project)
6264
if err != nil {
6365
return nil, err
6466
}
6567

68+
playground.Logger().Info("[projects] reset - project state reset")
6669
accounts, err := p.CreateInitialAccounts(project.ID)
6770
if err != nil {
6871
return nil, err
6972
}
7073

74+
playground.Logger().Info("[projects] reset - accounts created")
7175
return accounts, nil
7276
}
7377

7478
// ExecuteTransaction executes a transaction from the new transaction execution model and persists the execution.
7579
func (p *Projects) ExecuteTransaction(execution model.NewTransactionExecution) (*model.TransactionExecution, error) {
80+
playground.Logger().Info("[projects] execute transaction - start")
81+
7682
projID := execution.ProjectID
7783
p.mutex.load(projID).Lock()
7884
defer p.mutex.remove(projID).Unlock()
@@ -81,6 +87,8 @@ func (p *Projects) ExecuteTransaction(execution model.NewTransactionExecution) (
8187
return nil, err
8288
}
8389

90+
playground.Logger().Info("[projects] execute transaction - emulator loaded")
91+
8492
signers := make([]flowsdk.Address, len(execution.Signers))
8593
for i, sig := range execution.Signers {
8694
signers[i] = sig.ToFlowAddress()
@@ -95,12 +103,16 @@ func (p *Projects) ExecuteTransaction(execution model.NewTransactionExecution) (
95103
return nil, err
96104
}
97105

106+
playground.Logger().Info("[projects] execute transaction - emulator executed")
107+
98108
exe := model.TransactionExecutionFromFlow(execution.ProjectID, result, tx)
99109
err = p.store.InsertTransactionExecution(exe)
100110
if err != nil {
101111
return nil, err
102112
}
103113

114+
playground.Logger().Info("[projects] execute transaction - execution inserted")
115+
104116
return exe, nil
105117
}
106118

@@ -188,13 +200,17 @@ func (p *Projects) DeployContract(
188200
address model.Address,
189201
script string,
190202
) (*model.Account, error) {
203+
playground.Logger().Info("[projects] deploy contract - start")
204+
191205
p.mutex.load(projectID).Lock()
192206
defer p.mutex.remove(projectID).Unlock()
193207
emulator, err := p.load(projectID)
194208
if err != nil {
195209
return nil, err
196210
}
197211

212+
playground.Logger().Info("[projects] deploy contract - emulator loaded")
213+
198214
result, tx, err := emulator.deployContract(address.ToFlowAddress(), script)
199215
if err != nil {
200216
return nil, err
@@ -203,12 +219,16 @@ func (p *Projects) DeployContract(
203219
return nil, result.Error
204220
}
205221

222+
playground.Logger().Info("[projects] deploy contract - contract deployed")
223+
206224
exe := model.TransactionExecutionFromFlow(projectID, result, tx)
207225
err = p.store.InsertTransactionExecution(exe)
208226
if err != nil {
209227
return nil, err
210228
}
211229

230+
playground.Logger().Info("[projects] deploy contract - execution inserted")
231+
212232
return p.getAccount(projectID, address)
213233
}
214234

@@ -218,11 +238,15 @@ func (p *Projects) getAccount(projectID uuid.UUID, address model.Address) (*mode
218238
return nil, err
219239
}
220240

241+
playground.Logger().Info("[projects] get account - emulator loaded")
242+
221243
flowAccount, store, err := emulator.getAccount(address.ToFlowAddress())
222244
if err != nil {
223245
return nil, err
224246
}
225247

248+
playground.Logger().Info("[projects] get account - account retrieved from emualator")
249+
226250
jsonStorage, err := json.Marshal(store)
227251
if err != nil {
228252
return nil, errors.Wrap(err, "error marshaling account storage")
@@ -239,12 +263,17 @@ func (p *Projects) getAccount(projectID uuid.UUID, address model.Address) (*mode
239263
//
240264
// Do not call this method directly, it is not concurrency safe.
241265
func (p *Projects) load(projectID uuid.UUID) (blockchain, error) {
266+
267+
playground.Logger().Info("[projects] load - start")
268+
242269
var executions []*model.TransactionExecution
243270
err := p.store.GetTransactionExecutionsForProject(projectID, &executions)
244271
if err != nil {
245272
return nil, err
246273
}
247274

275+
playground.Logger().Info("[projects] load - retrieve executions")
276+
248277
emulator, executions, err := p.cache.get(projectID, executions)
249278
if emulator == nil || err != nil {
250279
emulator, err = newEmulator()
@@ -253,6 +282,8 @@ func (p *Projects) load(projectID uuid.UUID) (blockchain, error) {
253282
}
254283
}
255284

285+
playground.Logger().Info("[projects] load - resolve cache")
286+
256287
for _, execution := range executions {
257288
result, _, err := emulator.executeTransaction(
258289
execution.Script,
@@ -282,6 +313,8 @@ func (p *Projects) load(projectID uuid.UUID) (blockchain, error) {
282313
}
283314
}
284315

316+
playground.Logger().Info("[projects] load - executions completed")
317+
285318
p.cache.add(projectID, emulator)
286319

287320
return emulator, nil

controller/accounts.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/dapperlabs/flow-playground-api/blockchain"
2323
"github.com/dapperlabs/flow-playground-api/model"
2424
"github.com/dapperlabs/flow-playground-api/storage"
25+
playground "github.com/dapperlabs/flow-playground-api/telemetry"
2526
"github.com/google/uuid"
2627
"github.com/pkg/errors"
2728
)
@@ -84,6 +85,7 @@ func (a *Accounts) AllForProjectID(projectID uuid.UUID) ([]*model.Account, error
8485

8586
func (a *Accounts) Update(input model.UpdateAccount) (*model.Account, error) {
8687
var acc model.InternalAccount
88+
playground.Logger().Info("[accounts.controller] update - start")
8789

8890
// if we provided draft code then just do a storage update of an account
8991
if input.DeployedCode == nil {
@@ -100,19 +102,30 @@ func (a *Accounts) Update(input model.UpdateAccount) (*model.Account, error) {
100102
return nil, err
101103
}
102104

105+
playground.Logger().Info("[accounts.controller] update - got account from store")
106+
103107
account, err := a.blockchain.GetAccount(input.ProjectID, acc.Address)
104108
if err != nil {
105109
return nil, err
106110
}
107111

112+
playground.Logger().Info("[accounts.controller] update - got account from blockchain")
113+
108114
if account.DeployedCode != "" {
115+
playground.Logger().Info("[accounts.controller] update - redeploying")
116+
109117
var proj model.InternalProject
110118
err := a.store.GetProject(input.ProjectID, &proj)
111119
if err != nil {
112120
return nil, err
113121
}
114122

123+
playground.Logger().Info("[accounts.controller] update - redeploying, got project from store")
124+
115125
_, err = a.blockchain.Reset(&proj)
126+
127+
playground.Logger().Info("[accounts.controller] update - redeploying, reset blockchain")
128+
116129
if err != nil {
117130
return nil, err
118131
}
@@ -123,6 +136,8 @@ func (a *Accounts) Update(input model.UpdateAccount) (*model.Account, error) {
123136
return nil, errors.Wrap(err, "failed to deploy account code")
124137
}
125138

139+
playground.Logger().Info("[accounts.controller] update - deployed contract on emulator")
140+
126141
account.DraftCode = acc.DraftCode
127142
account.ID = acc.ID
128143
return account, nil

resolver.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ package playground
2020

2121
import (
2222
"context"
23-
2423
"github.com/dapperlabs/flow-playground-api/adapter"
24+
"github.com/dapperlabs/flow-playground-api/telemetry"
2525

2626
"github.com/Masterminds/semver"
2727
"github.com/dapperlabs/flow-playground-api/auth"
@@ -109,6 +109,8 @@ func (r *mutationResolver) authorize(ctx context.Context, ID uuid.UUID) error {
109109
}
110110

111111
func (r *mutationResolver) CreateProject(ctx context.Context, input model.NewProject) (*model.Project, error) {
112+
telemetry.Logger().Info("[resolver] create project")
113+
112114
user, err := r.auth.GetOrCreateUser(ctx)
113115
if err != nil {
114116
return nil, errors.Wrap(err, "failed to get or create user")
@@ -139,6 +141,8 @@ func (r *mutationResolver) UpdateProject(ctx context.Context, input model.Update
139141
}
140142

141143
func (r *mutationResolver) UpdateAccount(ctx context.Context, input model.UpdateAccount) (*model.Account, error) {
144+
telemetry.Logger().Info("[resolver] update account")
145+
142146
err := r.authorize(ctx, input.ProjectID)
143147
if err != nil {
144148
return nil, err
@@ -188,6 +192,8 @@ func (r *mutationResolver) CreateTransactionExecution(
188192
ctx context.Context,
189193
input model.NewTransactionExecution,
190194
) (*model.TransactionExecution, error) {
195+
telemetry.Logger().Info("[resolver] create transaction execution")
196+
191197
err := r.authorize(ctx, input.ProjectID)
192198
if err != nil {
193199
return nil, err

server/server.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ package main
2121
import (
2222
"context"
2323
"fmt"
24+
"github.com/dapperlabs/flow-playground-api/telemetry"
2425
"log"
2526
"net/http"
2627
"strings"
@@ -159,6 +160,8 @@ func main() {
159160
logger.Formatter = stackdriver.NewFormatter(stackdriver.WithService("flow-playground"))
160161
entry := logrus.NewEntry(logger)
161162

163+
telemetry.Logger().Info("server startup")
164+
162165
router.Route("/query", func(r chi.Router) {
163166
// Add CORS middleware around every request
164167
// See https://github.com/rs/cors for full option listing
@@ -195,6 +198,7 @@ func main() {
195198
r.Use(sessions.Middleware(cookieStore))
196199
r.Use(monitoring.Middleware())
197200

201+
telemetry.Logger().Info("GraphQL request")
198202
r.Handle(
199203
"/",
200204
playground.GraphQLHandler(

telemetry/logger.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package telemetry
2+
3+
import "github.com/sirupsen/logrus"
4+
5+
var logger *logrus.Logger
6+
7+
// todo temp telemtry
8+
func Logger() *logrus.Logger {
9+
if logger == nil {
10+
logger = logrus.StandardLogger()
11+
}
12+
return logger
13+
}

0 commit comments

Comments
 (0)