Skip to content

Commit

Permalink
refactor: use log level to reduce time for printing
Browse files Browse the repository at this point in the history
  • Loading branch information
arminveres committed Nov 15, 2023
1 parent b72dd82 commit 2580d76
Show file tree
Hide file tree
Showing 6 changed files with 226 additions and 142 deletions.
1 change: 1 addition & 0 deletions impl/run
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ else
"--revocation"
"--ident=$AGENT_NAME"
"--port $PORT"
"--log-level=perf"
)
if [[ $MULTITENANT == 1 ]]; then
ARIES_FLAGS+=("--multitenant")
Expand Down
149 changes: 87 additions & 62 deletions impl/src/agents/agent_container.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ def __init__(
endorser_role: str = None,
revocation: bool = False,
anoncreds_legacy_revocation: str = None,
log_level=LogLevel.DEBUG,
**kwargs,
):
extra_args = []
Expand Down Expand Up @@ -86,6 +87,7 @@ def __init__(
endorser_role=endorser_role,
revocation=revocation,
extra_args=extra_args,
log_level=log_level,
**kwargs,
)
self.connection_id = None
Expand Down Expand Up @@ -185,27 +187,31 @@ async def handle_issue_credential(self, message):
)

if state == "offer_received":
log_status("#15 After receiving credential offer, send credential request")
if self.log_level == LogLevel.DEBUG:
log_status("#15 After receiving credential offer, send credential request")
await self.admin_POST(
f"/issue-credential/records/{credential_exchange_id}/send-request"
)

elif state == "credential_acked":
cred_id = message["credential_id"]
self.log(f"Stored credential {cred_id} in wallet")
log_status(f"#18.1 Stored credential {cred_id} in wallet")
if self.log_level == LogLevel.DEBUG:
log_status(f"#18.1 Stored credential {cred_id} in wallet")
resp = await self.admin_GET(f"/credential/{cred_id}")
log_json(resp, label="Credential details:")
log_json(
message["credential_request_metadata"],
label="Credential request metadata:",
)
self.log("credential_id", message["credential_id"])
self.log("credential_definition_id", message["credential_definition_id"])
self.log("schema_id", message["schema_id"])
if self.log_level == LogLevel.DEBUG:
log_json(resp, label="Credential details:")
log_json(
message["credential_request_metadata"],
label="Credential request metadata:",
)
self.log("credential_id", message["credential_id"])
self.log("credential_definition_id", message["credential_definition_id"])
self.log("schema_id", message["schema_id"])

elif state == "request_received":
log_status("#17 Issue credential to X")
if self.log_level == LogLevel.DEBUG:
log_status("#17 Issue credential to X")
# issue credentials based on the credential_definition_id
cred_attrs = self.cred_attrs[message["credential_definition_id"]]
cred_preview = {
Expand Down Expand Up @@ -234,8 +240,9 @@ async def handle_issue_credential(self, message):
pass

elif state == "abandoned":
log_status("Credential exchange abandoned")
self.log("Problem report message:", message.get("error_msg"))
if self.log_level == LogLevel.DEBUG:
log_status("Credential exchange abandoned")
self.log("Problem report message:", message.get("error_msg"))

async def handle_issue_credential_v2_0(self, message):
state = message.get("state")
Expand All @@ -248,15 +255,17 @@ async def handle_issue_credential_v2_0(self, message):
self.log(f"Credential: state = {state}, cred_ex_id = {cred_ex_id}")

if state == "request-received":
log_status("#17 Issue credential to X")
if self.log_level == LogLevel.DEBUG:
log_status("#17 Issue credential to X")
# issue credential based on offer preview in cred ex record
await self.admin_POST(
f"/issue-credential-2.0/records/{cred_ex_id}/issue",
{"comment": f"Issuing credential, exchange {cred_ex_id}"},
)

elif state == "offer-received":
log_status("#15 After receiving credential offer, send credential request")
if self.log_level == LogLevel.DEBUG:
log_status("#15 After receiving credential offer, send credential request")
if message["by_format"]["cred_offer"].get("indy"):
await self.admin_POST(
f"/issue-credential-2.0/records/{cred_ex_id}/send-request"
Expand All @@ -276,8 +285,9 @@ async def handle_issue_credential_v2_0(self, message):
# Logic moved to detail record specific handler

elif state == "abandoned":
log_status("Credential exchange abandoned")
self.log("Problem report message:", message.get("error_msg"))
if self.log_level == LogLevel.DEBUG:
log_status("Credential exchange abandoned")
self.log("Problem report message:", message.get("error_msg"))

async def handle_issue_credential_v2_0_indy(self, message):
rev_reg_id = message.get("rev_reg_id")
Expand All @@ -286,12 +296,14 @@ async def handle_issue_credential_v2_0_indy(self, message):

if cred_id_stored:
cred_id = message["cred_id_stored"]
log_status(f"#18.1 Stored credential {cred_id} in wallet")
if self.log_level == LogLevel.DEBUG:
log_status(f"#18.1 Stored credential {cred_id} in wallet")
cred = await self.admin_GET(f"/credential/{cred_id}")
log_json(cred, label="Credential details:")
self.log("credential_id", cred_id)
self.log("cred_def_id", cred["cred_def_id"])
self.log("schema_id", cred["schema_id"])
if self.log_level == LogLevel.DEBUG:
log_json(cred, label="Credential details:")
self.log("credential_id", cred_id)
self.log("cred_def_id", cred["cred_def_id"])
self.log("schema_id", cred["schema_id"])
# track last successfully received credential
self.last_credential_received = cred
log_time_to_file(
Expand Down Expand Up @@ -321,9 +333,8 @@ async def handle_present_proof(self, message):
)

if state == "request_received":
log_status(
"#24 Query for credentials in the wallet that satisfy the proof request"
)
if self.log_level == LogLevel.DEBUG:
log_status("#24 Query for credentials in the wallet that satisfy the proof request")

# include self-attested attributes (not included in credentials)
credentials_by_reft = {}
Expand Down Expand Up @@ -368,14 +379,16 @@ async def handle_present_proof(self, message):
]
}

log_status("#25 Generate the proof")
if self.log_level == LogLevel.DEBUG:
log_status("#25 Generate the proof")
request = {
"requested_predicates": predicates,
"requested_attributes": revealed,
"self_attested_attributes": self_attested,
}

log_status("#26 Send the proof to X")
if self.log_level == LogLevel.DEBUG:
log_status("#26 Send the proof to X")
await self.admin_POST(
(
"/present-proof/records/"
Expand All @@ -387,16 +400,19 @@ async def handle_present_proof(self, message):
pass

elif state == "presentation_received":
log_status("#27 Process the proof provided by X")
log_status("#28 Check if proof is valid")
if self.log_level == LogLevel.DEBUG:
log_status("#27 Process the proof provided by X")
log_status("#28 Check if proof is valid")
proof = await self.admin_POST(
f"/present-proof/records/{presentation_exchange_id}/verify-presentation"
)
self.log("Proof =", proof["verified"])
if self.log_level == LogLevel.DEBUG:
self.log("Proof =", proof["verified"])

elif state == "abandoned":
log_status("Presentation exchange abandoned")
self.log("Problem report message:", message.get("error_msg"))
if self.log_level == LogLevel.DEBUG:
log_status("Presentation exchange abandoned")
self.log("Problem report message:", message.get("error_msg"))

async def handle_present_proof_v2_0(self, message):
state = message.get("state")
Expand All @@ -405,9 +421,8 @@ async def handle_present_proof_v2_0(self, message):

if state == "request-received":
# prover role
log_status(
"#24 Query for credentials in the wallet that satisfy the proof request"
)
if self.log_level == LogLevel.DEBUG:
log_status("#24 Query for credentials in the wallet that satisfy the proof request")
pres_request_indy = message["by_format"].get("pres_request", {}).get("indy")
pres_request_dif = message["by_format"].get("pres_request", {}).get("dif")
request = {}
Expand Down Expand Up @@ -465,7 +480,8 @@ async def handle_present_proof_v2_0(self, message):
]
}

log_status("#25 Generate the indy proof")
if self.log_level == LogLevel.DEBUG:
log_status("#25 Generate the indy proof")
indy_request = {
"indy": {
"requested_predicates": predicates,
Expand Down Expand Up @@ -495,7 +511,8 @@ async def handle_present_proof_v2_0(self, message):
else:
records = []

log_status("#25 Generate the dif proof")
if self.log_level == LogLevel.DEBUG:
log_status("#25 Generate the dif proof")
dif_request = {
"dif": {},
}
Expand All @@ -519,7 +536,8 @@ async def handle_present_proof_v2_0(self, message):
record_id,
]
break
log_msg("presenting ld-presentation:", dif_request)
if self.log_level == LogLevel.DEBUG:
log_msg("presenting ld-presentation:", dif_request)
request.update(dif_request)

# NOTE that the holder/prover can also/or specify constraints by including the whole proof request
Expand All @@ -545,25 +563,28 @@ async def handle_present_proof_v2_0(self, message):
except ClientError:
pass

log_status("#26 Send the proof to X: " + json.dumps(request))
if self.log_level == LogLevel.DEBUG:
log_status("#26 Send the proof to X: " + json.dumps(request))
await self.admin_POST(
f"/present-proof-2.0/records/{pres_ex_id}/send-presentation",
request,
)

elif state == "presentation-received":
# verifier role
log_status("#27 Process the proof provided by X")
log_status("#28 Check if proof is valid")
if self.log_level == LogLevel.DEBUG:
log_status("#27 Process the proof provided by X")
log_status("#28 Check if proof is valid")
proof = await self.admin_POST(
f"/present-proof-2.0/records/{pres_ex_id}/verify-presentation"
)
self.log("Proof =", proof["verified"])
self.last_proof_received = proof

elif state == "abandoned":
log_status("Presentation exchange abandoned")
self.log("Problem report message:", message.get("error_msg"))
if self.log_level == LogLevel.DEBUG:
log_status("Presentation exchange abandoned")
self.log("Problem report message:", message.get("error_msg"))

async def handle_basicmessages(self, message):
self.log("Received message:", message["content"])
Expand All @@ -585,9 +606,8 @@ async def generate_invitation(
self._connection_ready = asyncio.Future()
with log_timer("Generate invitation duration:"):
# Generate an invitation
log_status(
"#7 Create a connection to alice and print out the invite details"
)
if self.log_level == LogLevel.DEBUG:
log_status("#7 Create a connection to alice and print out the invite details")
invi_rec = await self.get_invite(
use_did_exchange,
auto_accept=auto_accept,
Expand All @@ -597,17 +617,17 @@ async def generate_invitation(
if display_qr:
qr = QRCode(border=1)
qr.add_data(invi_rec["invitation_url"])
log_msg(
"Use the following JSON to accept the invite from another demo agent."
" Or use the QR code to connect from a mobile agent."
)
log_msg(
json.dumps(invi_rec["invitation"]), label="Invitation Data:", color=None
)
if self.log_level == LogLevel.DEBUG:
log_msg(
"Use the following JSON to accept the invite from another demo agent."
" Or use the QR code to connect from a mobile agent."
)
log_msg(json.dumps(invi_rec["invitation"]), label="Invitation Data:", color=None)
qr.print_ascii(invert=True)

if wait:
log_msg("Waiting for connection...")
if self.log_level == LogLevel.DEBUG:
log_msg("Waiting for connection...")
await self.detect_connection()

return invi_rec
Expand All @@ -616,17 +636,21 @@ async def input_invitation(self, invite_details: dict, wait: bool = False):
self._connection_ready = asyncio.Future()
with log_timer("Connect duration:"):
connection = await self.receive_invite(invite_details)
log_json(connection, label="Invitation response:")
if self.log_level == LogLevel.DEBUG:
log_json(connection, label="Invitation response:")

if wait:
log_msg("Waiting for connection...")
if self.log_level == LogLevel.DEBUG:
log_msg("Waiting for connection...")
await self.detect_connection()

async def create_schema_and_cred_def(
self, schema_name, schema_attrs, revocation, version=None
):
with log_timer("Publish schema/cred def duration:"):
log_status("#3/4 Create a new schema/cred def on the ledger")
if self.log_level == LogLevel.DEBUG:
log_status("#3/4 Create a new schema/cred def on the ledger")
if not version:
version = format(
"%d.%d.%d"
Expand Down Expand Up @@ -893,7 +917,8 @@ async def issue_credential(
cred_def_id: str,
cred_attrs: list,
):
log_status("#13 Issue credential offer to X")
if self.log_level == LogLevel.DEBUG:
log_status("#13 Issue credential offer to X")

if self.cred_type == CRED_FORMAT_INDY:
cred_preview = {
Expand Down Expand Up @@ -953,7 +978,8 @@ async def receive_credential(
return matched

async def request_proof(self, proof_request, explicit_revoc_required: bool = False):
log_status("#20 Request proof of degree from alice")
if self.log_level == LogLevel.DEBUG:
log_status("#20 Request proof of degree from alice")

if self.cred_type == CRED_FORMAT_INDY:
indy_proof_request = {
Expand Down Expand Up @@ -1002,7 +1028,8 @@ async def request_proof(self, proof_request, explicit_revoc_required: bool = Fal
if "non_revoked" in proof_request["requested_predicates"][pred]:
del proof_request["requested_predicates"][pred]["non_revoked"]

log_status(f" >>> asking for proof for request: {indy_proof_request}")
if self.log_level == LogLevel.DEBUG:
log_status(f" >>> asking for proof for request: {indy_proof_request}")

proof_request_web_request = {
"connection_id": self.agent.connection_id,
Expand Down Expand Up @@ -1369,9 +1396,7 @@ async def create_agent_with_args(args, ident: str = None):
public_did = args.public_did if "public_did" in args else None

cred_type = args.cred_type if "cred_type" in args else None
log_msg(
f"Initializing demo agent {agent_ident} with AIP {aip} and credential type {cred_type}"
)
log_msg(f"Initializing demo agent {agent_ident} with AIP {aip} and credential type {cred_type}")

reuse_connections = "reuse_connections" in args and args.reuse_connections
if reuse_connections and aip != 20:
Expand Down
Loading

0 comments on commit 2580d76

Please sign in to comment.