Gideon has a working demo for the node config UI, so we walked through it and discussed it. Then, Rudolph gave us a demo of the pacsquery UI he has written on top of ChRIS. We went through everyone's status as well.
Gideon Node Config UI Demo
Demo of the node config UI. Main discussion points:
UI Discrepancy: flag is '-a 'in form field box, but the generated command at the bottom shows '--ageSpec' instead of '-a'
- Rudolph: discontinuity a UI concern
- Rudolph: the actual plugin can specify long and short forms... whichever is in the python code first, gets returned. When I wrote this plugin - I think the ordering there has an impact.
Dropdown confusion: why is flag a dropdown
- you can change it, in case you picked the wrong one
- if you click on -a and make it -P, this doesn't update the generated command. Gideon hasn't wired that yet. Whatever changes you make, will update the generated command.
- Idea: [Rudolph] as soon as you choose a parameter, dropdown shouldn't be changeable, if you make a mistake you can instead click on the x to delete the row and fill in another one.
- Idea: [Parul] instead of clicking add config options button to create a new row... you fill out a new row with a dropdown and field, and you submit it to add it to the list, and it gets added to generated command and saves and isn't editable but can be x'ed out.
- when you remove a row, it should remove from generated command, isn't wired yet so this didn't work for the demo.
Number of clicks Rudolph worried about the # of clicks, we talked it through a bit - Mo explained the tradeoff is there's more clicks compared to the previous version, but because the screen starts out less cluttered there's more vertical real estate for users to notice the generated command box right away. If all parameters were listed by default, it could fall below the fold and the user might not notice it. Having the generated command box enables the full blown text box on the other tab that is essentially 0 clicks if you know what you are doing.
Gideon will work on finishing this UI up today, then will work towards and end-to-end demo for next week, from plugin registration to the store to ChRIS to configuring the node.
Rudolph PACS query UI demo
- This is a UI on top of ChRIS. It doesn't interact with a PACS directly, it interfaces through pfdcm, which is like pfcon but connects to PACS.
- There's a form at the top that is repopulated with tags - patient id, accession number, etc. - standard tags that are used to query PACS..
- When you run the query, there would be results that appear in bottom black box. Those results would be organized according to different studies. Each one will appear with tabs. Then you can choose a different series in each study, it does the actual retrieve command and shows status above.
- Accession number is one-to-one with studies - each number maps to only one study. If no accession number is given, all of the studies for a given patient ID would be returned.
- The smallest unit this UI can retrieve is a series. A series is a type of scan that can have multiple images associated with it. You cannot retrieve just one image.
- A study is a single session with a piece of scanning equipment. Multiple series can take place during a study. (From the time you roll into the scanner until you roll out of the scanner, that is a study. Multiple series can occur during that study - different scan types.)
- The UI should show some kind of status on the hits - it's asynchronous and can take any number of minutes... after making their selections, it should allow user to query current status with the UI.
- We're not using any plugins or services to do this, only when this app is finished, once you're satisfied everything is pulled, will this backend will push the results into swift storage. Once in swift storage, will tell ChRIS to register those files, only then will they be visible to chris.
- Query from the form - the form constructs JSON payload to send to pfdcm.
- Status on what the system is doing
- Push 'query' button, 'performing query ... be patient while running'
- Results of search, each of those elements are selectable. they are the basic things you're trying to pull.
- Can grab entire study, or all studies together
- Results are in the form of a table
- Most of the results will be 'series' - a 'series' is a collection of files. 1 scan that has been done during a study.
- The most basic you can choose is a series. you can also choose a study.
New Asynchronous Task Queue in CUBE
- finished async task queue work
- can now scale cube processing independently of server serving requests
- will improve UX, offloads work from CUBE to async workers
- most difficult thing was implementing automated test. worker didn't have access to same temp DB that django creates for the tests.... figured out a solution - in-process worker in the same process as the test, then run test with that worker. It's a nice solution.
Admin interface for registering plugins
- next thing Jorge will work on is the admin interface to be able to register a plugin through a django admin website.
- if i run simple fs app twice, first time is registers, but the second one doesn't finish. seems like pfcon can no longer communicate with pfman or pfioh. an issue with swarm.
- if i have system up, run simple-fs-app, and it finishes successfuly. if i run it again, it never finishes, and when i see the communications, pfcon doesn't seem to get a response from pfman or pfioh in the logs.
- [gideon] i saw this as well, communication didn't happen and files not returning from backend. data exchange finished successfully - i have it on my screen i can show it.
- [rudolph] you instantiated cube and didn't run the tests, right because you have to clear state from the tests or bugs like this happen.
- [jorge] yeh i didn't run the tests at all. files registered, runs successfully first time. i dont see any response. i thikn pfcon trying to send requests but pfman pfioh not responding.
- [rudolph] i can look into that. are you looking at logs in real time or buffered
- [jorge] i'm using docker attach command, so it's real time, interactive terminal attached to container.
Nothing to report.
We pushed out hackathon until things more stable... but not coronavirus is throwing a wrench into a lot of stuff.