Skip to content

Commit 63b5d63

Browse files
d-linkoBrianSiposDavid Linko
authored
216 same corrlator nonce misbehaviour (#232)
* Moving back SQL to add healthcheck role * Testing and operating on native RHEL-9 python v3.9 * Use newer ACE and CAMP for python 3.9 compat * Attempting yarn package reconcilation * updated to pull latest execution set if same nonce is used * Attempting compat workaround * workaround split Dockerfiles * wait for services healthy before test * pinning vue-cli * anms-core healthcheck * fixed where vue cli version was set * updated reprots to handle mutiple rpts per exec set * removed old table --------- Co-authored-by: Brian Sipos <brian.sipos@jhuapl.edu> Co-authored-by: David Linko <david.linko@jhuapl.edu>
1 parent 5fdbf95 commit 63b5d63

File tree

5 files changed

+57
-41
lines changed

5 files changed

+57
-41
lines changed

anms-core/anms/routes/ARIs/reports.py

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -101,20 +101,26 @@ async def report_ac(agent_id: str, correlator_nonce: int):
101101
agent_id = agent_id.strip()
102102
final_res = []
103103
ari = None
104+
dec = ace.ari_cbor.Decoder()
105+
buf = io.StringIO()
104106
# Load in adms
105107
# get command that made the report as first entry
106108
stmt = select(ExecutionSet).where(and_(ExecutionSet.agent_id == agent_id, ExecutionSet.correlator_nonce == correlator_nonce) )
107109
async with get_async_session() as session:
108110
result: Result = await session.scalars(stmt)
109-
result = result.one_or_none()
110-
exec_set_entry=["time"]
111+
112+
# there should only be one execution per agent per correlator_nonce
113+
# in the event that two occur pull the latest one
114+
result = result.all()
115+
exec_set_dir = {}
116+
111117
if result:
118+
result = result[-1]
112119
exec_set = result.entries.hex()
113120
# use ACE to handle report set decoding
114121
in_text = '0x'+exec_set
115122
try:
116123
in_bytes = ace.cborutil.from_hexstr(in_text)
117-
dec = ace.ari_cbor.Decoder()
118124
ari = dec.decode(io.BytesIO(in_bytes))
119125

120126
except Exception as err:
@@ -125,26 +131,28 @@ async def report_ac(agent_id: str, correlator_nonce: int):
125131
if type(ari.value) == ace.ari.ExecutionSet:
126132
try:
127133
enc = ace.ari_text.Encoder()
128-
buf = io.StringIO()
129134
# run through targets and their parameters to get all things parts translated
130135
for targ in ari.value.targets:
131-
if targ.params:
132-
for param in targ.params:
133-
enc.encode(param, buf)
136+
buf = io.StringIO()
137+
exec_set_entry=["time"]
138+
enc.encode(targ, buf)
139+
out_text_targ = buf.getvalue()
140+
if targ is ace.LiteralARI and targ.type_id is ace.StructType.AC:
141+
for part in targ.value:
142+
buf = io.StringIO()
143+
enc.encode(part, buf)
134144
out_text = buf.getvalue()
135-
ari_val = await transcoder.transcoder_put_await_str(out_text)
136-
exec_set_entry.append(ari_val['data'])
145+
exec_set_entry.append(out_text)
137146
else:
138-
enc.encode(targ, buf)
139-
out_text = buf.getvalue()
140-
ari_val = await transcoder.transcoder_put_await_str(out_text)
141-
exec_set_entry.append(ari_val['data'])
142-
147+
exec_set_entry.append(out_text_targ)
148+
149+
exec_set_dir[out_text_targ] = [exec_set_entry]
150+
143151
except Exception as err:
144152
logger.info(err)
145153

146154

147-
final_res.append(exec_set_entry)
155+
# final_res.append(exec_set_entry)
148156
ari = None
149157
stmt = select(Report).where(and_(Report.agent_id == agent_id, Report.correlator_nonce == correlator_nonce) )
150158
async with get_async_session() as session:
@@ -157,7 +165,6 @@ async def report_ac(agent_id: str, correlator_nonce: int):
157165
in_text = '0x'+rpt_set
158166
try:
159167
in_bytes = ace.cborutil.from_hexstr(in_text)
160-
dec = ace.ari_cbor.Decoder()
161168
ari = dec.decode(io.BytesIO(in_bytes))
162169

163170
except Exception as err:
@@ -173,13 +180,17 @@ async def report_ac(agent_id: str, correlator_nonce: int):
173180
for item in rpt.items:
174181
buf = io.StringIO()
175182
enc.encode(item, buf)
176-
out_text = buf.getvalue()
177-
ari_val = await transcoder.transcoder_put_await_str(out_text)
178-
addition.append(ari_val['data'])
183+
out_text = buf.getvalue()
184+
addition.append(out_text)
185+
buf = io.StringIO()
186+
enc.encode(rpt.source, buf)
187+
out_text = buf.getvalue()
188+
189+
exec_set_dir[out_text].append(addition)
179190
except Exception as err:
180191
logger.error(err)
181-
182-
if addition not in final_res:
183-
final_res.append(addition)
184-
return final_res
192+
193+
194+
195+
return list(exec_set_dir.values())
185196

anms-core/anms/routes/transcoder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ async def transcoder_put_cbor_await(cbor: str):
125125

126126
while True:
127127
with get_session() as session:
128-
curr_uri = TranscoderLog.query.filter_by(TranscoderLog.transcoder_log_id==transcoder_log_id).first()
128+
curr_uri = TranscoderLog.query.filter(TranscoderLog.transcoder_log_id==transcoder_log_id).first()
129129
if curr_uri.parsed_as != "pending":
130130
if curr_uri.parsed_as == "ERROR":
131131
curr_uri = "ARI://BADARI"

anms-core/integration_test/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,3 @@
1919
"integration_tests": "newman run integration_tests.json -r cli,json"
2020
}
2121
}
22-
z

anms-ui/check_packages.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,6 @@ docker image build --tag anms-ui --target anms-ui ${SELFDIR}
4141

4242

4343
docker run anms-ui bash -c "cd /opt/node_app/public && yarn audit --json || exit 0" > ${SELFDIR}/logs/${PUBLIC_LOG}
44-
docker run anms-ui bash -c "cd /opt/node_app/server && npm audit --json || exit 0" > ${SELFDIR}/logs/${SERVER_LOG}
44+
docker run anms-ui bash -c "cd /opt/node_app/server && yarn audit --json || exit 0" > ${SELFDIR}/logs/${SERVER_LOG}
4545

4646

anms-ui/public/app/components/management/agents/reports.vue

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,14 @@
1818
:key="index"
1919
:value="index">{{ rpt }}</b-form-select-option>
2020
</b-form-select>
21-
<b-table sticky-header
21+
<div v-for="(_, index) in tableHeaders" :key="index">
22+
<b-table sticky-header
2223
hover
2324
bordered
2425
responsive
2526
v-if="!loading && selected != -1"
26-
id="report-table"
27-
:fields="tableHeaders"
28-
:items="tableItems"
29-
>
30-
</b-table>
27+
id="report-table" :items="tableItems[index]" :fields="tableHeaders[index]"></b-table>
28+
</div>
3129
</div>
3230
</template>
3331

@@ -73,17 +71,25 @@ export default {
7371
this.loading = false;
7472
},
7573
processReport(report) {
76-
let holdHeader = report.shift();
77-
this.tableHeaders = [];
78-
for (let i = 0; i < holdHeader.length; i++) {
79-
this.tableHeaders.push({"key":holdHeader[i]});
80-
}
81-
for (let item of report) {
82-
let row = {};
74+
75+
for(const rpt of report){
76+
77+
let currTableItems = [];
78+
let currTableHeaders = []
79+
let holdHeader = rpt.shift();
8380
for (let i = 0; i < holdHeader.length; i++) {
84-
row[holdHeader[i]] = item[i];
81+
currTableHeaders.push({"key":holdHeader[i]});
82+
}
83+
this.tableHeaders.push(currTableHeaders);
84+
85+
for (let item of rpt) {
86+
let row = {};
87+
for (let i = 0; i < holdHeader.length; i++) {
88+
row[holdHeader[i]] = item[i];
89+
}
90+
currTableItems.push(row);
8591
}
86-
this.tableItems.push(row);
92+
this.tableItems.push(currTableItems)
8793
}
8894
}
8995
},

0 commit comments

Comments
 (0)