@@ -5,8 +5,8 @@ import com.scalableminds.util.accesscontext.TokenContext
5
5
import com .scalableminds .util .geometry .Vec3Int
6
6
import com .scalableminds .util .image .{Color , JPEGWriter }
7
7
import com .scalableminds .util .objectid .ObjectId
8
+ import com .scalableminds .util .time .Instant
8
9
import com .scalableminds .util .tools .Fox
9
- import com .scalableminds .webknossos .datastore .DataStoreConfig
10
10
import com .scalableminds .webknossos .datastore .helpers .MissingBucketHeaders
11
11
import com .scalableminds .webknossos .datastore .image .{ImageCreator , ImageCreatorParameters }
12
12
import com .scalableminds .webknossos .datastore .models .DataRequestCollection ._
@@ -21,21 +21,19 @@ import com.scalableminds.webknossos.datastore.models.datasource.{Category, DataL
21
21
import com .scalableminds .webknossos .datastore .services .{
22
22
BinaryDataService ,
23
23
BinaryDataServiceHolder ,
24
- DataSourceRepository ,
25
24
DataStoreAccessTokenService ,
26
25
DatasetCache ,
27
26
FindDataService ,
28
- MappingService ,
29
27
UserAccessRequest
30
28
}
31
- import com .scalableminds .webknossos .datastore .services .mesh .AdHocMeshServiceHolder
32
29
import com .scalableminds .webknossos .datastore .slacknotification .DSSlackNotificationService
33
30
import play .api .i18n .Messages
34
31
import play .api .libs .json .Json
35
32
import play .api .mvc .{Action , AnyContent , PlayBodyParsers , RawBuffer }
36
33
37
34
import java .io .ByteArrayOutputStream
38
35
import scala .concurrent .ExecutionContext
36
+ import scala .concurrent .duration .DurationInt
39
37
40
38
/**
41
39
* This is equivalent to the BinaryDataController for Datasets by DatasetId
@@ -44,6 +42,7 @@ class WKDatasetController @Inject()(
44
42
accessTokenService : DataStoreAccessTokenService ,
45
43
binaryDataServiceHolder : BinaryDataServiceHolder ,
46
44
findDataService : FindDataService ,
45
+ slackNotificationService : DSSlackNotificationService ,
47
46
datasetCache : DatasetCache
48
47
)(implicit ec : ExecutionContext , bodyParsers : PlayBodyParsers )
49
48
extends Controller
@@ -54,13 +53,22 @@ class WKDatasetController @Inject()(
54
53
def requestViaWebknossos (datasetId : String , dataLayerName : String ): Action [List [WebknossosDataRequest ]] =
55
54
Action .async(validateJson[List [WebknossosDataRequest ]]) { implicit request =>
56
55
accessTokenService.validateAccessFromTokenContext(UserAccessRequest .readDataset(datasetId)) {
57
- // TODO Log time
58
- for {
59
- datasetId <- ObjectId .fromString(datasetId)
60
- dataSource <- datasetCache.getById(datasetId)
61
- dataLayer <- dataSource.getDataLayer(dataLayerName).toFox ?~> " Data layer not found" ~> NOT_FOUND
62
- (data, indices) <- requestData(dataSource.id, dataLayer, request.body)
63
- } yield Ok (data).withHeaders(createMissingBucketsHeaders(indices): _* )
56
+ logTime(slackNotificationService.noticeSlowRequest) {
57
+ val t = Instant .now
58
+ for {
59
+ datasetId <- ObjectId .fromString(datasetId)
60
+ dataSource <- datasetCache.getById(datasetId)
61
+ dataLayer <- dataSource.getDataLayer(dataLayerName).toFox ?~> " Data layer not found" ~> NOT_FOUND
62
+ (data, indices) <- requestData(dataSource.id, dataLayer, request.body)
63
+ duration = Instant .since(t)
64
+ _ = if (duration > (10 seconds))
65
+ logger.info(
66
+ s " Complete data request for $datasetId/ $dataLayerName took ${formatDuration(duration)}. "
67
+ + request.body.headOption
68
+ .map(firstReq => s " First of ${request.body.size} requests was $firstReq" )
69
+ .getOrElse(" " ))
70
+ } yield Ok (data).withHeaders(createMissingBucketsHeaders(indices): _* )
71
+ }
64
72
}
65
73
}
66
74
0 commit comments