Skip to content

Commit e43bcdd

Browse files
committed
define an implicit getPrettySimpleName
This is most consistent with Java API, it adds `obj.getClass.getPrettySimpleName` to the existing `obj.getClass.get*Name`. Instead we could go with a nicer `obj.prettyClassName`.
1 parent ffecd62 commit e43bcdd

File tree

23 files changed

+69
-54
lines changed

23 files changed

+69
-54
lines changed

eclair-core/src/main/scala/fr/acinq/eclair/channel/Channel.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2143,15 +2143,15 @@ class Channel(val nodeParams: NodeParams, val wallet: OnChainChannelFunder, remo
21432143
}
21442144

21452145
private def handleAddHtlcCommandError(c: CMD_ADD_HTLC, cause: ChannelException, channelUpdate: Option[ChannelUpdate]) = {
2146-
log.warning(s"${cause.getMessage} while processing cmd=${c.getClass.getSimpleName} in state=$stateName")
2146+
log.warning(s"${cause.getMessage} while processing cmd=${c.getClass.getPrettySimpleName} in state=$stateName")
21472147
val replyTo = if (c.replyTo == ActorRef.noSender) sender() else c.replyTo
21482148
replyTo ! RES_ADD_FAILED(c, cause, channelUpdate)
21492149
context.system.eventStream.publish(ChannelErrorOccurred(self, stateData.channelId, remoteNodeId, stateData, LocalError(cause), isFatal = false))
21502150
stay()
21512151
}
21522152

21532153
private def handleCommandError(cause: ChannelException, c: channel.Command) = {
2154-
log.warning(s"${cause.getMessage} while processing cmd=${c.getClass.getSimpleName} in state=$stateName")
2154+
log.warning(s"${cause.getMessage} while processing cmd=${c.getClass.getPrettySimpleName} in state=$stateName")
21552155
val replyTo_opt = c match {
21562156
case hasOptionalReplyTo: HasOptionalReplyToCommand => hasOptionalReplyTo.replyTo_opt
21572157
case hasReplyTo: HasReplyToCommand => if (hasReplyTo.replyTo == ActorRef.noSender) Some(sender()) else Some(hasReplyTo.replyTo)
@@ -2335,9 +2335,9 @@ class Channel(val nodeParams: NodeParams, val wallet: OnChainChannelFunder, remo
23352335
log.warning(s"force-closing channel at user request")
23362336
case _ if msg.exists(_.isInstanceOf[OpenChannel]) || msg.exists(_.isInstanceOf[AcceptChannel]) =>
23372337
// invalid remote channel parameters are logged as warning
2338-
log.warning(s"${cause.getMessage} while processing msg=${msg.getOrElse("n/a").getClass.getSimpleName} in state=$stateName")
2338+
log.warning(s"${cause.getMessage} while processing msg=${msg.getOrElse("n/a").getClass.getPrettySimpleName} in state=$stateName")
23392339
case _: ChannelException =>
2340-
log.error(s"${cause.getMessage} while processing msg=${msg.getOrElse("n/a").getClass.getSimpleName} in state=$stateName")
2340+
log.error(s"${cause.getMessage} while processing msg=${msg.getOrElse("n/a").getClass.getPrettySimpleName} in state=$stateName")
23412341
case _ =>
23422342
// unhandled error: we dump the channel data, and print the stack trace
23432343
log.error(cause, s"msg=${msg.getOrElse("n/a")} stateData=$stateData:")
@@ -2724,7 +2724,7 @@ class Channel(val nodeParams: NodeParams, val wallet: OnChainChannelFunder, remo
27242724
override val supervisorStrategy: OneForOneStrategy = OneForOneStrategy(loggingEnabled = true) { case _ => SupervisorStrategy.Escalate }
27252725

27262726
override def aroundReceive(receive: Actor.Receive, msg: Any): Unit = {
2727-
KamonExt.time(ProcessMessage.withTag("MessageType", msg.getClass.getSimpleName)) {
2727+
KamonExt.time(ProcessMessage.withTag("MessageType", msg.getClass.getPrettySimpleName)) {
27282728
super.aroundReceive(receive, msg)
27292729
}
27302730
}

eclair-core/src/main/scala/fr/acinq/eclair/crypto/TransportHandler.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import fr.acinq.eclair.crypto.ChaCha20Poly1305.ChaCha20Poly1305Error
2828
import fr.acinq.eclair.crypto.Noise._
2929
import fr.acinq.eclair.remote.EclairInternalsSerializer.RemoteTypes
3030
import fr.acinq.eclair.wire.protocol.{AnnouncementSignatures, RoutingMessage}
31-
import fr.acinq.eclair.{Diagnostics, FSMDiagnosticActorLogging, Logs, getSimpleClassName}
31+
import fr.acinq.eclair.{Diagnostics, FSMDiagnosticActorLogging, Logs, PrettySimpleClassName}
3232
import scodec.bits.ByteVector
3333
import scodec.{Attempt, Codec, DecodeResult}
3434

@@ -263,7 +263,7 @@ class TransportHandler[T: ClassTag](keyPair: KeyPair, rs: Option[ByteVector], co
263263
case Event(msg, d) =>
264264
d match {
265265
case n: NormalData[T] => log.warning(s"unhandled message $msg in state normal unackedSent=${n.unackedSent.size} unackedReceived=${n.unackedReceived.size} sendBuffer.lowPriority=${n.sendBuffer.lowPriority.size} sendBuffer.normalPriority=${n.sendBuffer.normalPriority.size}")
266-
case _ => log.warning(s"unhandled message $msg in state ${d.getClass.getSimpleName}")
266+
case _ => log.warning(s"unhandled message $msg in state ${d.getClass.getPrettySimpleName}")
267267
}
268268
stay()
269269
}
@@ -277,7 +277,7 @@ class TransportHandler[T: ClassTag](keyPair: KeyPair, rs: Option[ByteVector], co
277277
stateData match {
278278
case normal: NormalData[_] =>
279279
// NB: we deduplicate on the class name: each class will appear once but there may be many instances (less verbose and gives debug hints)
280-
log.info("stopping (unackedReceived={} unackedSent={})", normal.unackedReceived.keys.map(getSimpleClassName).toSet.mkString(","), normal.unackedSent.map(getSimpleClassName))
280+
log.info("stopping (unackedReceived={} unackedSent={})", normal.unackedReceived.keys.map(_.getClass.getPrettySimpleName).toSet.mkString(","), normal.unackedSent.map(_.getClass.getPrettySimpleName))
281281
case _ =>
282282
log.info("stopping")
283283
}

eclair-core/src/main/scala/fr/acinq/eclair/db/pg/PgAuditDb.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import fr.acinq.eclair.db.Monitoring.Tags.DbBackends
2626
import fr.acinq.eclair.db._
2727
import fr.acinq.eclair.payment._
2828
import fr.acinq.eclair.transactions.Transactions.PlaceHolderPubKey
29-
import fr.acinq.eclair.{MilliSatoshi, MilliSatoshiLong, TimestampMilli}
29+
import fr.acinq.eclair.{MilliSatoshi, MilliSatoshiLong, PrettySimpleClassName, TimestampMilli}
3030
import grizzled.slf4j.Logging
3131

3232
import java.sql.{Statement, Timestamp}
@@ -273,7 +273,7 @@ class PgAuditDb(implicit ds: DataSource) extends AuditDb with Logging {
273273
inTransaction { pg =>
274274
using(pg.prepareStatement("INSERT INTO audit.channel_errors VALUES (?, ?, ?, ?, ?, ?)")) { statement =>
275275
val (errorName, errorMessage) = e.error match {
276-
case LocalError(t) => (t.getClass.getSimpleName, t.getMessage)
276+
case LocalError(t) => (t.getClass.getPrettySimpleName, t.getMessage)
277277
case RemoteError(error) => ("remote", error.toAscii)
278278
}
279279
statement.setString(1, e.channelId.toHex)

eclair-core/src/main/scala/fr/acinq/eclair/db/pg/PgPaymentsDb.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class PgPaymentsDb(implicit ds: DataSource, lock: PgLock) extends PaymentsDb wit
9494
}
9595

9696
override def addOutgoingPayment(sent: OutgoingPayment): Unit = withMetrics("payments/add-outgoing", DbBackends.Postgres) {
97-
require(sent.status == OutgoingPaymentStatus.Pending, s"outgoing payment isn't pending (${sent.status.getClass.getSimpleName})")
97+
require(sent.status == OutgoingPaymentStatus.Pending, s"outgoing payment isn't pending (${sent.status.getClass.getPrettySimpleName})")
9898
withLock { pg =>
9999
using(pg.prepareStatement("INSERT INTO payments.sent (id, parent_id, external_id, payment_hash, payment_type, amount_msat, recipient_amount_msat, recipient_node_id, created_at, payment_request) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) { statement =>
100100
statement.setString(1, sent.id.toString)

eclair-core/src/main/scala/fr/acinq/eclair/db/sqlite/SqliteAuditDb.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import fr.acinq.eclair.db.Monitoring.Tags.DbBackends
2626
import fr.acinq.eclair.db._
2727
import fr.acinq.eclair.payment._
2828
import fr.acinq.eclair.transactions.Transactions.PlaceHolderPubKey
29-
import fr.acinq.eclair.{MilliSatoshi, MilliSatoshiLong, TimestampMilli}
29+
import fr.acinq.eclair.{MilliSatoshi, MilliSatoshiLong, PrettySimpleClassName, TimestampMilli}
3030
import grizzled.slf4j.Logging
3131

3232
import java.sql.{Connection, Statement}
@@ -269,7 +269,7 @@ class SqliteAuditDb(sqlite: Connection) extends AuditDb with Logging {
269269
override def add(e: ChannelErrorOccurred): Unit = withMetrics("audit/add-channel-error", DbBackends.Sqlite) {
270270
using(sqlite.prepareStatement("INSERT INTO channel_errors VALUES (?, ?, ?, ?, ?, ?)")) { statement =>
271271
val (errorName, errorMessage) = e.error match {
272-
case LocalError(t) => (t.getClass.getSimpleName, t.getMessage)
272+
case LocalError(t) => (t.getClass.getPrettySimpleName, t.getMessage)
273273
case RemoteError(error) => ("remote", error.toAscii)
274274
}
275275
statement.setBytes(1, e.channelId.toArray)

eclair-core/src/main/scala/fr/acinq/eclair/db/sqlite/SqlitePaymentsDb.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class SqlitePaymentsDb(sqlite: Connection) extends PaymentsDb with Logging {
121121
}
122122

123123
override def addOutgoingPayment(sent: OutgoingPayment): Unit = withMetrics("payments/add-outgoing", DbBackends.Sqlite) {
124-
require(sent.status == OutgoingPaymentStatus.Pending, s"outgoing payment isn't pending (${sent.status.getClass.getSimpleName})")
124+
require(sent.status == OutgoingPaymentStatus.Pending, s"outgoing payment isn't pending (${sent.status.getClass.getPrettySimpleName})")
125125
using(sqlite.prepareStatement("INSERT INTO sent_payments (id, parent_id, external_id, payment_hash, payment_type, amount_msat, recipient_amount_msat, recipient_node_id, created_at, payment_request) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) { statement =>
126126
statement.setString(1, sent.id.toString)
127127
statement.setString(2, sent.parentId.toString)

eclair-core/src/main/scala/fr/acinq/eclair/json/JsonSerializers.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import fr.acinq.eclair.transactions.DirectedHtlc
3535
import fr.acinq.eclair.transactions.Transactions._
3636
import fr.acinq.eclair.wire.protocol.MessageOnionCodecs.blindedRouteCodec
3737
import fr.acinq.eclair.wire.protocol._
38-
import fr.acinq.eclair.{CltvExpiry, CltvExpiryDelta, Feature, FeatureSupport, MilliSatoshi, ShortChannelId, TimestampMilli, TimestampSecond, UInt64, UnknownFeature}
38+
import fr.acinq.eclair.{CltvExpiry, CltvExpiryDelta, Feature, FeatureSupport, MilliSatoshi, PrettySimpleClassName, ShortChannelId, TimestampMilli, TimestampSecond, UInt64, UnknownFeature}
3939
import org.json4s
4040
import org.json4s.JsonAST._
4141
import org.json4s.jackson.Serialization
@@ -319,7 +319,7 @@ object PaymentFailedSummarySerializer extends ConvertClassSerializer[PaymentFail
319319

320320
object ThrowableSerializer extends MinimalSerializer({
321321
case t: Throwable if t.getMessage != null => JString(t.getMessage)
322-
case t: Throwable => JString(t.getClass.getSimpleName)
322+
case t: Throwable => JString(t.getClass.getPrettySimpleName)
323323
})
324324

325325
object FailureMessageSerializer extends MinimalSerializer({
@@ -400,7 +400,7 @@ object ChannelEventSerializer extends MinimalSerializer({
400400
case e: ChannelClosed => JObject(
401401
JField("type", JString("channel-closed")),
402402
JField("channelId", JString(e.channelId.toHex)),
403-
JField("closingType", JString(e.closingType.getClass.getSimpleName))
403+
JField("closingType", JString(e.closingType.getClass.getPrettySimpleName))
404404
)
405405
})
406406

eclair-core/src/main/scala/fr/acinq/eclair/package.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,9 @@ package object eclair {
138138
// @formatter:on
139139
}
140140

141-
/**
142-
* Apparently .getClass.getSimpleName can crash java 8 with a "Malformed class name" error
143-
*/
144-
def getSimpleClassName(o: Any): String = o.getClass.getName.split("\\$").last
141+
implicit class PrettySimpleClassName[T](private val o: Class[T]) extends AnyVal {
142+
/** This removes trailing $ from `case object` class names */
143+
def getPrettySimpleName: String = o.getSimpleName.replace("$", "")
144+
}
145145

146146
}

eclair-core/src/main/scala/fr/acinq/eclair/payment/Monitoring.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package fr.acinq.eclair.payment
1818

1919
import fr.acinq.bitcoin.Crypto.PublicKey
20-
import fr.acinq.eclair.MilliSatoshi
20+
import fr.acinq.eclair.{MilliSatoshi, PrettySimpleClassName}
2121
import fr.acinq.eclair.channel.CMD_FAIL_HTLC
2222
import kamon.Kamon
2323

@@ -119,12 +119,12 @@ object Monitoring {
119119

120120
def apply(cmdFail: CMD_FAIL_HTLC): String = cmdFail.reason match {
121121
case Left(_) => Remote
122-
case Right(f) => f.getClass.getSimpleName
122+
case Right(f) => f.getClass.getPrettySimpleName
123123
}
124124

125125
def apply(pf: PaymentFailure): String = pf match {
126-
case LocalFailure(_, _, t) => t.getClass.getSimpleName
127-
case RemoteFailure(_, _, e) => e.failureMessage.getClass.getSimpleName
126+
case LocalFailure(_, _, t) => t.getClass.getPrettySimpleName
127+
case RemoteFailure(_, _, e) => e.failureMessage.getClass.getPrettySimpleName
128128
case UnreadableRemoteFailure(_, _) => "UnreadableRemoteFailure"
129129
}
130130
}

eclair-core/src/main/scala/fr/acinq/eclair/payment/receive/MultiPartHandler.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ class MultiPartHandler(nodeParams: NodeParams, register: ActorRef, db: IncomingP
112112

113113
case MultiPartPaymentFSM.MultiPartPaymentFailed(paymentHash, failure, parts) if doHandle(paymentHash) =>
114114
Logs.withMdc(log)(Logs.mdc(paymentHash_opt = Some(paymentHash))) {
115-
Metrics.PaymentFailed.withTag(Tags.Direction, Tags.Directions.Received).withTag(Tags.Failure, failure.getClass.getSimpleName).increment()
115+
Metrics.PaymentFailed.withTag(Tags.Direction, Tags.Directions.Received).withTag(Tags.Failure, failure.getClass.getPrettySimpleName).increment()
116116
log.warning("payment with paidAmount={} failed ({})", parts.map(_.amount).sum, failure)
117117
pendingPayments.get(paymentHash).foreach { case (_, handler: ActorRef) => handler ! PoisonPill }
118118
parts.collect {

0 commit comments

Comments
 (0)