Skip to content

Commit 7bebf79

Browse files
authored
Merge branch 'main' into issue-checkcommitread
2 parents d5eef56 + 2b7ecc9 commit 7bebf79

File tree

12 files changed

+146
-72
lines changed

12 files changed

+146
-72
lines changed

src/api-engine/api/lib/agent/docker/handler.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def create(self, info):
5656
else:
5757
return None
5858
except Exception as e:
59+
LOG.exception("DockerAgent Not Created")
5960
raise e
6061

6162
def delete(self, *args, **kwargs):
@@ -66,6 +67,7 @@ def delete(self, *args, **kwargs):
6667
else:
6768
raise response.reason
6869
except Exception as e:
70+
LOG.exception("DockerAgent Not Deleted")
6971
raise e
7072

7173
def start(self, *args, **kwargs):
@@ -76,6 +78,7 @@ def start(self, *args, **kwargs):
7678
else:
7779
raise response.reason
7880
except Exception as e:
81+
LOG.exception("DockerAgent Not Started")
7982
raise e
8083

8184
def restart(self, *args, **kwargs):
@@ -86,6 +89,7 @@ def restart(self, *args, **kwargs):
8689
else:
8790
raise response.reason
8891
except Exception as e:
92+
LOG.exception("DockerAgent Not Restarted")
8993
raise e
9094

9195
def stop(self, *args, **kwargs):
@@ -96,6 +100,7 @@ def stop(self, *args, **kwargs):
96100
else:
97101
raise response.reason
98102
except Exception as e:
103+
LOG.exception("DockerAgent Not Stopped")
99104
raise e
100105

101106
def get(self, *args, **kwargs):
@@ -106,6 +111,7 @@ def get(self, *args, **kwargs):
106111
else:
107112
raise response.reason
108113
except Exception as e:
114+
LOG.exception("DockerAgent Not Found")
109115
raise e
110116

111117
def update_config(self, config_file, node_type):
@@ -123,4 +129,5 @@ def update_config(self, config_file, node_type):
123129
else:
124130
raise response.reason
125131
except Exception as e:
132+
LOG.exception("Config Update Failed")
126133
raise e

src/api-engine/api/routes/agent/views.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ def retrieve(self, request, pk=None):
205205
if agent.type == HostType.Kubernetes.name.lower():
206206
k8s_config = KubernetesConfig.objects.get(agent=agent)
207207
except ObjectDoesNotExist:
208-
raise ResourceNotFound
208+
raise ResourceNotFound("Agent not found")
209209
else:
210210
data = agent.__dict__
211211
if k8s_config:
@@ -234,7 +234,7 @@ def update(self, request, pk=None):
234234
# organization = request.user.organization
235235
try:
236236
if Agent.objects.get(name=name):
237-
raise ResourceExists
237+
raise ResourceExists("Agent Exists")
238238
except ObjectDoesNotExist:
239239
pass
240240
Agent.objects.filter(id=pk).update(name=name)
@@ -266,7 +266,7 @@ def partial_update(self, request, pk=None):
266266
try:
267267
agent = Agent.objects.get(id=pk)
268268
except ObjectDoesNotExist:
269-
raise ResourceNotFound
269+
raise ResourceNotFound("Agent not found")
270270
else:
271271
if name:
272272
agent.name = name
@@ -308,10 +308,10 @@ def destroy(self, request, pk=None):
308308
else:
309309
raise CustomError("User can't delete agent!")
310310
except ObjectDoesNotExist:
311-
raise ResourceNotFound
311+
raise ResourceNotFound("Agent not found")
312312
else:
313313
if agent.node.count():
314-
raise ResourceInUse
314+
raise ResourceInUse("Agent in use")
315315
agent.delete()
316316

317317
return Response(ok(None), status=status.HTTP_202_ACCEPTED)
@@ -357,7 +357,7 @@ def apply(self, request):
357357
schedulable=True,
358358
).order_by("capacity")
359359
if len(agents) == 0:
360-
raise NoResource
360+
raise NoResource("No Agent")
361361

362362
agent = agents[0]
363363
agent.organization = request.user.organization
@@ -371,6 +371,7 @@ def apply(self, request):
371371
except NoResource as e:
372372
raise e
373373
except Exception as e:
374+
LOG.exception("Agent Not Applied")
374375
return Response(
375376
err(e.args), status=status.HTTP_400_BAD_REQUEST
376377
)
@@ -399,7 +400,7 @@ def release(self, request, pk=None):
399400
id=pk, organization=request.user.organization
400401
)
401402
except ObjectDoesNotExist:
402-
raise ResourceNotFound
403+
raise ResourceNotFound("Agent not found")
403404
else:
404405
agent.organization = None
405406
agent.save()

src/api-engine/api/routes/chaincode/views.py

Lines changed: 69 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
from rest_framework.decorators import action
77
from rest_framework.permissions import IsAuthenticated
88
import os
9-
import tempfile, shutil, tarfile, json
9+
import tempfile
10+
import shutil
11+
import tarfile
12+
import json
1013

1114
from drf_yasg.utils import swagger_auto_schema
1215
from api.config import FABRIC_CHAINCODE_STORE
@@ -35,8 +38,10 @@
3538
import hashlib
3639
import logging
3740

41+
3842
LOG = logging.getLogger(__name__)
3943

44+
4045
class ChainCodeViewSet(viewsets.ViewSet):
4146
"""Class represents Channel related operations."""
4247
permission_classes = [IsAuthenticated, ]
@@ -52,13 +57,19 @@ def _read_cc_pkg(self, pk, filename, ccpackage_path):
5257
meta_path = os.path.join(ccpackage_path, "metadata.json")
5358
# extract metadata file
5459
with tarfile.open(os.path.join(ccpackage_path, filename)) as tared_file:
55-
metadata_file = tared_file.getmember("metadata.json")
56-
tared_file.extract(metadata_file, path=ccpackage_path)
57-
58-
with open(meta_path, 'r') as f:
59-
metadata = json.load(f)
60-
language = metadata["type"]
61-
label = metadata["label"]
60+
metadata_file = None
61+
for member in tared_file.getmembers():
62+
if member.name.endswith("metadata.json"):
63+
metadata_file = member
64+
break
65+
66+
if metadata_file is not None:
67+
# Extract the metadata file
68+
metadata_content = tared_file.extractfile(
69+
metadata_file).read().decode("utf-8")
70+
metadata = json.loads(metadata_content)
71+
language = metadata["type"]
72+
label = metadata["label"]
6273

6374
if os.path.exists(meta_path):
6475
os.remove(meta_path)
@@ -70,6 +81,7 @@ def _read_cc_pkg(self, pk, filename, ccpackage_path):
7081
chaincode.save()
7182

7283
except Exception as e:
84+
LOG.exception("Could not read Chaincode Package")
7385
raise e
7486

7587
@swagger_auto_schema(
@@ -110,7 +122,10 @@ def list(self, request):
110122
]
111123
response = ChaincodeListResponse(
112124
{"data": chanincodes_list, "total": chaincodes.count()})
113-
return Response(data=ok(response.data), status=status.HTTP_200_OK)
125+
return Response(
126+
data=ok(
127+
response.data),
128+
status=status.HTTP_200_OK)
114129
except Exception as e:
115130
return Response(
116131
err(e.args), status=status.HTTP_400_BAD_REQUEST
@@ -144,22 +159,23 @@ def package(self, request):
144159
if member.name.endswith("metadata.json"):
145160
metadata_file = member
146161
break
147-
162+
148163
if metadata_file is not None:
149164
# Extract the metadata file
150-
metadata_content = tar.extractfile(metadata_file).read().decode("utf-8")
165+
metadata_content = tar.extractfile(
166+
metadata_file).read().decode("utf-8")
151167
metadata = json.loads(metadata_content)
152168
label = metadata.get("label")
153169
else:
154170
return Response(
155-
err("Metadata file not found in the chaincode package."), status=status.HTTP_400_BAD_REQUEST
156-
)
171+
err("Metadata file not found in the chaincode package."),
172+
status=status.HTTP_400_BAD_REQUEST)
157173

158174
org = request.user.organization
159175
# qs = Node.objects.filter(type="peer", organization=org)
160176
# if not qs.exists():
161177
# return Response(
162-
# err("at least 1 peer node is required for the chaincode package upload."),
178+
# err("at least 1 peer node is required for the chaincode package upload."),
163179
# status=status.HTTP_400_BAD_REQUEST
164180
# )
165181
# peer_node = qs.first()
@@ -168,7 +184,7 @@ def package(self, request):
168184
# return_code, content = peer_channel_cli.lifecycle_calculatepackageid(temp_cc_path)
169185
# if (return_code != 0):
170186
# return Response(
171-
# err("calculate packageid failed for {}.".format(content)),
187+
# err("calculate packageid failed for {}.".format(content)),
172188
# status=status.HTTP_400_BAD_REQUEST
173189
# )
174190
# packageid = content.strip()
@@ -184,7 +200,7 @@ def package(self, request):
184200
cc = ChainCode.objects.filter(package_id=packageid)
185201
if cc.exists():
186202
return Response(
187-
err("package with id {} already exists.".format(packageid)),
203+
err("package with id {} already exists.".format(packageid)),
188204
status=status.HTTP_400_BAD_REQUEST
189205
)
190206

@@ -205,9 +221,11 @@ def package(self, request):
205221

206222
# start thread to read package meta info, update db
207223
try:
208-
threading.Thread(target=self._read_cc_pkg,
209-
args=(uuid, file.name, ccpackage_path)).start()
224+
threading.Thread(
225+
target=self._read_cc_pkg,
226+
args=(uuid, file.name, ccpackage_path)).start()
210227
except Exception as e:
228+
LOG.exception("Failed Threading")
211229
raise e
212230

213231
return Response(
@@ -229,6 +247,8 @@ def package(self, request):
229247
@action(detail=False, methods=['post'])
230248
def install(self, request):
231249
chaincode_id = request.data.get("id")
250+
# Get the selected node ID from request
251+
node_id = request.data.get("node")
232252
try:
233253
cc_targz = ""
234254
file_path = os.path.join(FABRIC_CHAINCODE_STORE, chaincode_id)
@@ -237,16 +257,31 @@ def install(self, request):
237257
break
238258

239259
org = request.user.organization
240-
qs = Node.objects.filter(type="peer", organization=org)
241-
if not qs.exists():
242-
raise ResourceNotFound
243-
peer_node = qs.first()
260+
261+
# If node_id is provided, get that specific node
262+
if node_id:
263+
try:
264+
peer_node = Node.objects.get(
265+
id=node_id, type="peer", organization=org)
266+
except Node.DoesNotExist:
267+
return Response(
268+
err("Selected peer node not found or not authorized."),
269+
status=status.HTTP_404_NOT_FOUND
270+
)
271+
else:
272+
# Fallback to first peer if no node selected
273+
qs = Node.objects.filter(type="peer", organization=org)
274+
if not qs.exists():
275+
raise ResourceNotFound
276+
peer_node = qs.first()
244277

245278
envs = init_env_vars(peer_node, org)
246279
peer_channel_cli = PeerChainCode(**envs)
247280
res = peer_channel_cli.lifecycle_install(cc_targz)
248281
if res != 0:
249-
return Response(err("install chaincode failed."), status=status.HTTP_400_BAD_REQUEST)
282+
return Response(
283+
err("install chaincode failed."),
284+
status=status.HTTP_400_BAD_REQUEST)
250285
except Exception as e:
251286
return Response(
252287
err(e.args), status=status.HTTP_400_BAD_REQUEST
@@ -267,7 +302,7 @@ def query_installed(self, request):
267302
org = request.user.organization
268303
qs = Node.objects.filter(type="peer", organization=org)
269304
if not qs.exists():
270-
raise ResourceNotFound
305+
raise ResourceNotFound("Peer Does Not Exist")
271306
peer_node = qs.first()
272307
envs = init_env_vars(peer_node, org)
273308

@@ -297,7 +332,7 @@ def get_installed_package(self, request):
297332
org = request.user.organization
298333
qs = Node.objects.filter(type="peer", organization=org)
299334
if not qs.exists():
300-
raise ResourceNotFound
335+
raise ResourceNotFound("Peer Does Not Exist")
301336
peer_node = qs.first()
302337
envs = init_env_vars(peer_node, org)
303338

@@ -336,13 +371,13 @@ def approve_for_my_org(self, request):
336371
org = request.user.organization
337372
qs = Node.objects.filter(type="orderer", organization=org)
338373
if not qs.exists():
339-
raise ResourceNotFound
374+
raise ResourceNotFound("Orderer Does Not Exist")
340375
orderer_node = qs.first()
341376
orderer_url = orderer_node.name + "." + org.name.split(".", 1)[1] + ":" + str(7050)
342377

343378
qs = Node.objects.filter(type="peer", organization=org)
344379
if not qs.exists():
345-
raise ResourceNotFound
380+
raise ResourceNotFound("Peer Does Not Exist")
346381
peer_node = qs.first()
347382
envs = init_env_vars(peer_node, org)
348383

@@ -371,7 +406,7 @@ def query_approved(self, request):
371406
org = request.user.organization
372407
qs = Node.objects.filter(type="peer", organization=org)
373408
if not qs.exists():
374-
raise ResourceNotFound
409+
raise ResourceNotFound("Peer Does Not Exist")
375410
peer_node = qs.first()
376411
envs = init_env_vars(peer_node, org)
377412

@@ -414,7 +449,7 @@ def check_commit_readiness(self, request):
414449
org = request.user.organization
415450
qs = Node.objects.filter(type="orderer", organization=org)
416451
if not qs.exists():
417-
raise ResourceNotFound
452+
raise ResourceNotFound("Orderer Does Not Exist")
418453
orderer_node = qs.first()
419454

420455
orderer_tls_dir = "{}/{}/crypto-config/ordererOrganizations/{}/orderers/{}/msp/tlscacerts" \
@@ -428,7 +463,7 @@ def check_commit_readiness(self, request):
428463

429464
qs = Node.objects.filter(type="peer", organization=org)
430465
if not qs.exists():
431-
raise ResourceNotFound
466+
raise ResourceNotFound("Peer Does Not Exist")
432467
peer_node = qs.first()
433468
envs = init_env_vars(peer_node, org)
434469

@@ -470,7 +505,7 @@ def commit(self, request):
470505
org = request.user.organization
471506
qs = Node.objects.filter(type="orderer", organization=org)
472507
if not qs.exists():
473-
raise ResourceNotFound
508+
raise ResourceNotFound("Orderer Does Not Exist")
474509
orderer_node = qs.first()
475510

476511
orderer_tls_dir = "{}/{}/crypto-config/ordererOrganizations/{}/orderers/{}/msp/tlscacerts" \
@@ -483,7 +518,7 @@ def commit(self, request):
483518

484519
qs = Node.objects.filter(type="peer", organization=org)
485520
if not qs.exists():
486-
raise ResourceNotFound
521+
raise ResourceNotFound("Peer Does Not Exist")
487522
peer_node = qs.first()
488523
envs = init_env_vars(peer_node, org)
489524

@@ -530,7 +565,7 @@ def query_committed(self, request):
530565
org = request.user.organization
531566
qs = Node.objects.filter(type="peer", organization=org)
532567
if not qs.exists():
533-
raise ResourceNotFound
568+
raise ResourceNotFound("Peer Does Not Exist")
534569
peer_node = qs.first()
535570
envs = init_env_vars(peer_node, org)
536571
peer_channel_cli = PeerChainCode(**envs)
@@ -539,6 +574,7 @@ def query_committed(self, request):
539574
if code != 0:
540575
return Response(err("query committed failed."), status=status.HTTP_400_BAD_REQUEST)
541576
except Exception as e:
577+
LOG.exception("Could Not Commit Query")
542578
return Response(
543579
err(e.args), status=status.HTTP_400_BAD_REQUEST
544580
)

0 commit comments

Comments
 (0)