mirror of
https://github.com/OpenBankProject/OBP-API.git
synced 2026-02-06 18:26:50 +00:00
Add new fields to API Metrics #91
This commit is contained in:
parent
17d92ac579
commit
da78dabe15
@ -483,6 +483,24 @@ object OAuthHandshake extends RestHelper with Loggable {
|
||||
nonceSaved && tokenSaved
|
||||
}
|
||||
|
||||
def getConsumer: List[Consumer] = {
|
||||
val httpMethod = S.request match {
|
||||
case Full(r) => r.request.method
|
||||
case _ => "GET"
|
||||
}
|
||||
val (httpCode, message, oAuthParameters) = validator("protectedResource", httpMethod)
|
||||
import code.model.Token
|
||||
val consumer: Option[Consumer] = for {
|
||||
tokenId: String <- oAuthParameters.get("oauth_token")
|
||||
token: Token <- Token.find(By(Token.key, tokenId))
|
||||
consumer: Consumer <- token.consumerId.foreign
|
||||
} yield {
|
||||
consumer
|
||||
}
|
||||
consumer.toList
|
||||
}
|
||||
|
||||
|
||||
def getUser : Box[User] = {
|
||||
val httpMethod = S.request match {
|
||||
case Full(r) => r.request.method
|
||||
|
||||
@ -173,7 +173,14 @@ object APIUtil extends Loggable {
|
||||
// TODO This should use Elastic Search or Kafka not an RDBMS
|
||||
val u = user.orNull
|
||||
val userId = if (u != null) u.userId else "null"
|
||||
APIMetrics.apiMetrics.vend.saveMetric(userId, S.uriAndQueryString.getOrElse(""), (now: TimeSpan))
|
||||
val userName = if (u != null) u.name else "null"
|
||||
var appName = "null"
|
||||
var developerEmail = "null"
|
||||
for (c <- getConsumer) {
|
||||
appName = c.name.get
|
||||
developerEmail = c.developerEmail.get
|
||||
}
|
||||
APIMetrics.apiMetrics.vend.saveMetric(userId, S.uriAndQueryString.getOrElse(""), (now: TimeSpan), userName, appName, developerEmail)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -34,11 +34,11 @@ object APIMetrics extends SimpleInjector {
|
||||
|
||||
trait APIMetrics {
|
||||
|
||||
def saveMetric(userId: String, url : String, date : Date) : Unit
|
||||
def saveMetric(userId: String, url : String, date : Date, userName: String, appName: String, developerEmail: String) : Unit
|
||||
|
||||
def saveMetric(url : String, date : Date) : Unit ={
|
||||
//TODO: update all places calling old function before removing this
|
||||
saveMetric ("TODO: userId", url, date)
|
||||
saveMetric ("TODO: userId", url, date, "TODO: userName", "TODO: appName", "TODO: developerEmail")
|
||||
}
|
||||
|
||||
//TODO: ordering of list? should this be by date? currently not enforced
|
||||
@ -57,4 +57,7 @@ trait APIMetric {
|
||||
def getUrl() : String
|
||||
def getDate() : Date
|
||||
def getUserId() : String
|
||||
def getUserName() : String
|
||||
def getAppName : String
|
||||
def getDeveloperEmail() : String
|
||||
}
|
||||
|
||||
@ -9,10 +9,10 @@ object ElasticsearchMetrics extends APIMetrics {
|
||||
|
||||
val es = new elasticsearchMetrics
|
||||
|
||||
override def saveMetric(userId: String, url: String, date: Date): Unit = {
|
||||
override def saveMetric(userId: String, url: String, date: Date, userName: String, appName: String, developerEmail: String): Unit = {
|
||||
if (Props.getBool("allow_elasticsearch", false) && Props.getBool("allow_elasticsearch_metrics", false) ) {
|
||||
|
||||
es.indexMetric(userId, url, date)
|
||||
es.indexMetric(userId, url, date, userName, appName, developerEmail)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -7,8 +7,8 @@ import net.liftweb.mapper._
|
||||
|
||||
object MappedMetrics extends APIMetrics {
|
||||
|
||||
override def saveMetric(userId: String, url: String, date: Date): Unit = {
|
||||
MappedMetric.create.url(url).date(date).save
|
||||
override def saveMetric(userId: String, url: String, date: Date, userName: String, appName: String, developerEmail: String): Unit = {
|
||||
MappedMetric.create.url(url).date(date).userName(userName).appName(appName).developerEmail(developerEmail).save
|
||||
}
|
||||
|
||||
override def getAllGroupedByUserId(): Map[String, List[APIMetric]] = {
|
||||
@ -34,13 +34,19 @@ class MappedMetric extends APIMetric with LongKeyedMapper[MappedMetric] with IdP
|
||||
object userId extends DefaultStringField(this)
|
||||
object url extends DefaultStringField(this)
|
||||
object date extends MappedDateTime(this)
|
||||
object userName extends DefaultStringField(this)
|
||||
object appName extends DefaultStringField(this)
|
||||
object developerEmail extends DefaultStringField(this)
|
||||
|
||||
|
||||
override def getUrl(): String = url.get
|
||||
override def getDate(): Date = date.get
|
||||
override def getUserId(): String = userId.get
|
||||
override def getUserName(): String = userName.get
|
||||
override def getAppName(): String = appName.get
|
||||
override def getDeveloperEmail(): String = developerEmail.get
|
||||
}
|
||||
|
||||
object MappedMetric extends MappedMetric with LongKeyedMetaMapper[MappedMetric] {
|
||||
override def dbIndexes = Index(userId) :: Index(url) :: Index(date) :: super.dbIndexes
|
||||
override def dbIndexes = Index(userId) :: Index(url) :: Index(date) :: Index(userName) :: Index(appName) :: Index(developerEmail) :: super.dbIndexes
|
||||
}
|
||||
|
||||
@ -43,19 +43,28 @@ import net.liftweb.record.field.StringField
|
||||
object userId extends StringField(this,255)
|
||||
object url extends StringField(this,255)
|
||||
object date extends DateField(this)
|
||||
object userName extends StringField(this,255)
|
||||
object appName extends StringField(this,255)
|
||||
object developerEmail extends StringField(this,255)
|
||||
|
||||
def getUrl() = url.get
|
||||
def getDate() = date.get
|
||||
def getUserId() = userId.get
|
||||
def getUserName(): String = userName.get
|
||||
def getAppName(): String = appName.get
|
||||
def getDeveloperEmail(): String = developerEmail.get
|
||||
}
|
||||
|
||||
private object MongoAPIMetric extends MongoAPIMetric with MongoMetaRecord[MongoAPIMetric] with APIMetrics {
|
||||
|
||||
def saveMetric(userId: String, url : String, date : Date) : Unit = {
|
||||
def saveMetric(userId: String, url : String, date : Date, userName: String, appName: String, developerEmail: String) : Unit = {
|
||||
MongoAPIMetric.createRecord.
|
||||
userId(userId).
|
||||
url(url).
|
||||
date(date).
|
||||
userName(userName).
|
||||
appName(appName).
|
||||
developerEmail(developerEmail).
|
||||
save
|
||||
}
|
||||
|
||||
|
||||
@ -142,7 +142,10 @@ class elasticsearchMetrics extends elasticsearch {
|
||||
"request" as (
|
||||
"userId" typed StringType,
|
||||
"url" typed StringType,
|
||||
"date" typed DateType
|
||||
"date" typed DateType,
|
||||
"userName" typed StringType,
|
||||
"appName" typed StringType,
|
||||
"developerEmail" typed StringType
|
||||
)
|
||||
)
|
||||
}
|
||||
@ -152,14 +155,17 @@ class elasticsearchMetrics extends elasticsearch {
|
||||
}
|
||||
}
|
||||
|
||||
def indexMetric(userId: String, url: String, date: Date) {
|
||||
def indexMetric(userId: String, url: String, date: Date, userName: String, appName: String, developerEmail: String) {
|
||||
if (Props.getBool("allow_elasticsearch", false) && Props.getBool("allow_elasticsearch_metrics", false) ) {
|
||||
try {
|
||||
client.execute {
|
||||
index into esIndex / "request" fields (
|
||||
"userId" -> userId,
|
||||
"url" -> url,
|
||||
"date" -> date
|
||||
"date" -> date,
|
||||
"userName" -> userName,
|
||||
"appName" -> appName,
|
||||
"developerEmail" -> developerEmail
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user