Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
atlas
Project
Overview
Details
Activity
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
dataplatform
atlas
Commits
ee99930f
Commit
ee99930f
authored
Feb 13, 2019
by
Nikhil Bonte
Committed by
Madhan Neethiraj
Feb 20, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ATLAS-3052: removed caching of metrics query results
Change-Id: Ifeabb13acb387781a72d00146d4acd4ea9a279d8 Signed-off-by:
Madhan Neethiraj
<
madhan@apache.org
>
parent
a0e4cd1a
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
57 additions
and
83 deletions
+57
-83
MetricsService.java
...c/main/java/org/apache/atlas/services/MetricsService.java
+54
-80
MetricsServiceTest.java
...st/java/org/apache/atlas/services/MetricsServiceTest.java
+1
-1
AdminResource.java
...in/java/org/apache/atlas/web/resources/AdminResource.java
+2
-2
No files found.
repository/src/main/java/org/apache/atlas/services/MetricsService.java
View file @
ee99930f
...
...
@@ -59,108 +59,95 @@ public class MetricsService {
protected
static
final
String
METRIC_TAG_COUNT
=
TAG
+
"Count"
;
protected
static
final
String
METRIC_ENTITIES_PER_TAG
=
TAG
+
"Entities"
;
public
static
final
String
METRIC_QUERY_CACHE_TTL
=
"atlas.metric.query.cache.ttlInSecs"
;
public
static
final
String
METRIC_QUERY_GREMLIN_TYPES_BATCH_SIZE
=
"atlas.metric.query.gremlin.typesBatchSize"
;
public
static
final
int
DEFAULT_CACHE_TTL_IN_SECS
=
900
;
public
static
final
String
METRIC_COLLECTION_TIME
=
"collectionTime"
;
private
final
AtlasGraph
atlasGraph
;
private
final
AtlasTypeRegistry
typeRegistry
;
private
final
int
cacheTTLInSecs
;
private
final
String
indexSearchPrefix
=
AtlasGraphUtilsV2
.
getIndexSearchPrefix
();
private
AtlasMetrics
cachedMetrics
=
null
;
private
long
cacheExpirationTime
=
0
;
@Inject
public
MetricsService
(
final
Configuration
configuration
,
final
AtlasGraph
graph
,
final
AtlasTypeRegistry
typeRegistry
)
{
this
.
atlasGraph
=
graph
;
this
.
cacheTTLInSecs
=
configuration
!=
null
?
configuration
.
getInt
(
METRIC_QUERY_CACHE_TTL
,
DEFAULT_CACHE_TTL_IN_SECS
)
:
DEFAULT_CACHE_TTL_IN_SECS
;
public
MetricsService
(
final
AtlasGraph
graph
,
final
AtlasTypeRegistry
typeRegistry
)
{
this
.
atlasGraph
=
graph
;
this
.
typeRegistry
=
typeRegistry
;
}
@SuppressWarnings
(
"unchecked"
)
public
AtlasMetrics
getMetrics
(
boolean
ignoreCache
)
{
if
(
ignoreCache
||
!
isCacheValid
())
{
AtlasMetrics
metrics
=
new
AtlasMetrics
();
public
AtlasMetrics
getMetrics
()
{
AtlasMetrics
metrics
=
new
AtlasMetrics
();
metrics
.
addMetric
(
GENERAL
,
METRIC_TYPE_COUNT
,
getAllTypesCount
());
metrics
.
addMetric
(
GENERAL
,
METRIC_TAG_COUNT
,
getAllTagsCount
());
metrics
.
addMetric
(
GENERAL
,
METRIC_TYPE_COUNT
,
getAllTypesCount
());
metrics
.
addMetric
(
GENERAL
,
METRIC_TAG_COUNT
,
getAllTagsCount
());
Map
<
String
,
Long
>
activeCountMap
=
new
HashMap
<>();
Map
<
String
,
Long
>
deletedCountMap
=
new
HashMap
<>();
Map
<
String
,
Long
>
activeCountMap
=
new
HashMap
<>();
Map
<
String
,
Long
>
deletedCountMap
=
new
HashMap
<>();
// metrics for classifications
Collection
<
String
>
classificationDefNames
=
typeRegistry
.
getAllClassificationDefNames
();
// metrics for classifications
Collection
<
String
>
classificationDefNames
=
typeRegistry
.
getAllClassificationDefNames
();
if
(
classificationDefNames
!=
null
)
{
for
(
String
classificationDefName
:
classificationDefNames
)
{
activeCountMap
.
put
(
classificationDefName
,
getTypeCount
(
classificationDefName
,
ACTIVE
));
}
if
(
classificationDefNames
!=
null
)
{
for
(
String
classificationDefName
:
classificationDefNames
)
{
activeCountMap
.
put
(
classificationDefName
,
getTypeCount
(
classificationDefName
,
ACTIVE
));
}
}
// metrics for entities
Collection
<
String
>
entityDefNames
=
typeRegistry
.
getAllEntityDefNames
();
// metrics for entities
Collection
<
String
>
entityDefNames
=
typeRegistry
.
getAllEntityDefNames
();
if
(
entityDefNames
!=
null
)
{
for
(
String
entityDefName
:
entityDefNames
)
{
activeCountMap
.
put
(
entityDefName
,
getTypeCount
(
entityDefName
,
ACTIVE
));
deletedCountMap
.
put
(
entityDefName
,
getTypeCount
(
entityDefName
,
DELETED
));
}
if
(
entityDefNames
!=
null
)
{
for
(
String
entityDefName
:
entityDefNames
)
{
activeCountMap
.
put
(
entityDefName
,
getTypeCount
(
entityDefName
,
ACTIVE
));
deletedCountMap
.
put
(
entityDefName
,
getTypeCount
(
entityDefName
,
DELETED
));
}
}
Map
<
String
,
Long
>
activeEntityCount
=
new
HashMap
<>();
Map
<
String
,
Long
>
deletedEntityCount
=
new
HashMap
<>();
long
unusedTypeCount
=
0
;
long
totalEntities
=
0
;
Map
<
String
,
Long
>
activeEntityCount
=
new
HashMap
<>();
Map
<
String
,
Long
>
deletedEntityCount
=
new
HashMap
<>();
long
unusedTypeCount
=
0
;
long
totalEntities
=
0
;
for
(
String
entityDefName
:
typeRegistry
.
getAllEntityDefNames
())
{
Long
activeCount
=
activeCountMap
.
get
(
entityDefName
);
Long
deletedCount
=
deletedCountMap
.
get
(
entityDefName
);
for
(
String
entityDefName
:
typeRegistry
.
getAllEntityDefNames
())
{
Long
activeCount
=
activeCountMap
.
get
(
entityDefName
);
Long
deletedCount
=
deletedCountMap
.
get
(
entityDefName
);
if
(
activeCount
>
0
)
{
activeEntityCount
.
put
(
entityDefName
,
activeCount
);
totalEntities
+=
activeCount
.
longValue
();
}
if
(
activeCount
>
0
)
{
activeEntityCount
.
put
(
entityDefName
,
activeCount
);
totalEntities
+=
activeCount
.
longValue
();
}
if
(
deletedCount
>
0
)
{
deletedEntityCount
.
put
(
entityDefName
,
deletedCount
);
totalEntities
+=
deletedCount
.
longValue
();
}
if
(
deletedCount
>
0
)
{
deletedEntityCount
.
put
(
entityDefName
,
deletedCount
);
totalEntities
+=
deletedCount
.
longValue
();
}
if
(
activeCount
==
0
&&
deletedCount
==
0
)
{
unusedTypeCount
++;
}
if
(
activeCount
==
0
&&
deletedCount
==
0
)
{
unusedTypeCount
++;
}
}
metrics
.
addMetric
(
GENERAL
,
METRIC_TYPE_UNUSED_COUNT
,
unusedTypeCount
);
metrics
.
addMetric
(
GENERAL
,
METRIC_ENTITY_COUNT
,
totalEntities
);
metrics
.
addMetric
(
ENTITY
,
METRIC_ENTITY_ACTIVE
,
activeEntityCount
);
metrics
.
addMetric
(
ENTITY
,
METRIC_ENTITY_DELETED
,
deletedEntityCount
);
metrics
.
addMetric
(
GENERAL
,
METRIC_TYPE_UNUSED_COUNT
,
unusedTypeCount
);
metrics
.
addMetric
(
GENERAL
,
METRIC_ENTITY_COUNT
,
totalEntities
);
metrics
.
addMetric
(
ENTITY
,
METRIC_ENTITY_ACTIVE
,
activeEntityCount
);
metrics
.
addMetric
(
ENTITY
,
METRIC_ENTITY_DELETED
,
deletedEntityCount
);
Map
<
String
,
Long
>
taggedEntityCount
=
new
HashMap
<>();
Map
<
String
,
Long
>
taggedEntityCount
=
new
HashMap
<>();
for
(
String
classificationName
:
typeRegistry
.
getAllClassificationDefNames
())
{
Long
count
=
activeCountMap
.
get
(
classificationName
);
for
(
String
classificationName
:
typeRegistry
.
getAllClassificationDefNames
())
{
Long
count
=
activeCountMap
.
get
(
classificationName
);
if
(
count
>
0
)
{
taggedEntityCount
.
put
(
classificationName
,
count
);
}
if
(
count
>
0
)
{
taggedEntityCount
.
put
(
classificationName
,
count
);
}
}
metrics
.
addMetric
(
TAG
,
METRIC_ENTITIES_PER_TAG
,
taggedEntityCount
);
// Miscellaneous metrics
long
collectionTime
=
System
.
currentTimeMillis
();
metrics
.
addMetric
(
TAG
,
METRIC_ENTITIES_PER_TAG
,
taggedEntityCount
);
metrics
.
addMetric
(
GENERAL
,
METRIC_COLLECTION_TIME
,
collectionTime
);
// Miscellaneous metrics
long
collectionTime
=
System
.
currentTimeMillis
();
this
.
cachedMetrics
=
metrics
;
this
.
cacheExpirationTime
=
(
collectionTime
+
cacheTTLInSecs
*
1000
);
}
metrics
.
addMetric
(
GENERAL
,
METRIC_COLLECTION_TIME
,
collectionTime
);
return
cachedM
etrics
;
return
m
etrics
;
}
private
Long
getTypeCount
(
String
typeName
,
Status
status
)
{
...
...
@@ -183,16 +170,4 @@ public class MetricsService {
return
CollectionUtils
.
isNotEmpty
(
allTagNames
)
?
allTagNames
.
size
()
:
0
;
}
private
boolean
isCacheValid
()
{
boolean
valid
=
cachedMetrics
!=
null
&&
System
.
currentTimeMillis
()
<
cacheExpirationTime
;
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"cachedMetrics: {}"
,
cachedMetrics
!=
null
);
LOG
.
debug
(
"cacheExpirationTime: {}"
,
cacheExpirationTime
);
LOG
.
debug
(
"valid: {}"
,
valid
);
}
return
valid
;
}
}
\ No newline at end of file
repository/src/test/java/org/apache/atlas/services/MetricsServiceTest.java
View file @
ee99930f
...
...
@@ -124,7 +124,7 @@ public class MetricsServiceTest {
@Test
public
void
testGetMetrics
()
{
AtlasMetrics
metrics
=
metricsService
.
getMetrics
(
true
);
AtlasMetrics
metrics
=
metricsService
.
getMetrics
();
assertNotNull
(
metrics
);
...
...
webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java
View file @
ee99930f
...
...
@@ -319,12 +319,12 @@ public class AdminResource {
@GET
@Path
(
"metrics"
)
@Produces
(
Servlets
.
JSON_MEDIA_TYPE
)
public
AtlasMetrics
getMetrics
(
@QueryParam
(
"ignoreCache"
)
boolean
ignoreCache
)
{
public
AtlasMetrics
getMetrics
()
{
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"==> AdminResource.getMetrics()"
);
}
AtlasMetrics
metrics
=
metricsService
.
getMetrics
(
ignoreCache
);
AtlasMetrics
metrics
=
metricsService
.
getMetrics
();
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"<== AdminResource.getMetrics()"
);
...
...
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