Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Visualization Service #6

Closed
karamolegkos opened this issue Dec 18, 2022 · 13 comments
Closed

Visualization Service #6

karamolegkos opened this issue Dec 18, 2022 · 13 comments
Assignees
Labels
enhancement New feature or request

Comments

@karamolegkos
Copy link
Member

karamolegkos commented Dec 18, 2022

This issue reffers to the Visualization Service, that is generating images for the Web Application.

This issue is linked with: #3
Bottlenecked by: #4 - We need to know the way that this service can extract information by Prometheus.

@konvoulgaris
Copy link

Highly linked with "Visualization Interface". Need to coordinate tasks
@karamolegkos @adreaskar

@adreaskar
Copy link
Member

adreaskar commented Dec 29, 2022

Νομίζω πρέπει να αποφασίσουμε στο πως θα γίνεται η αποθήκευση απο το Visualization Service και ύστερα η λήψη των εικόνων απο το Visualization Interface (DIASTEMA-UPRC/web-application#31)

I see two scenarios:

  • Το Visualization Service κάνει generate όλα τα plots ahead of time και τα αποθηκεύει σε κάποιο αποθετήριο (perhaps MinIO?), και αποθηκεύει το retrieval url στην MongoDB. Ο χρήστης μέσα απο το Visualization Interface, επιλέγει την ανάλυση για την οποία θέλει αποτελέσματα, και πατώντας Visualize Results το service παίρνει τα link απο την MongoDB που σχετίζονται με αυτήν την ανάλυση, και κάνει display τις εικόνες.
  • Το Visualization Service κάνει δυναμικά generate τις εικόνες τις οποίες χρειάζεται το Visualization Interface, στέλνοντας του απευθείας ένα list of urls, που θα είναι όλες οι εικόνες που πρέπει να κάνει Display. Δεν ξέρω εδώ βέβαια πως θα παίξει το κομμάτι του filtering.

Food for thought

@adreaskar
Copy link
Member

adreaskar commented Dec 29, 2022

Update:

Κάνω μια πρόταση για το πως θα μπορούσαμε να δομήσουμε τα 3 services ώστε να παίζουν μεταξύ τους:

  1. Όταν μια ανάλυση τελειώνει ο Orchestrator πηγαίνει: MongoDB -> UIDB database -> Pipelines collection, να βρίσκει την εγγραφή αυτής της ανάλυσης και να προσθέτει στο πεδίο metadata την εγγραφή: "status":"completed"
  2. Το Visualization Interface σκανάρει όλο το Pipelines collection και εμφανίζει τις αναλύσεις που έχουν "status":"completed" Για κάθε ανάλυση παρέχει κάποια μεταδεδομένα καθώς και δύο κουμπιά:
    • Results
    • Monitor
  3. Το Visualization Service για κάθε analysis που είναι "status":"completed", παράγει όλα γραφήματα απο τα αποτελέσματα και τις μετρικές.
    • Για κάθε ένα απο αυτά, δημιουργεί ένα link της εικόνας, τα οποία τα αποθηκεύει όλα μαζί στο πεδίο metadata, σε μια νέα εγραφή της μορφής: "charts":["url1","url2","url3", ... ]
    • Επιπλεων, αποθηκεύει στο ίδιο πεδίο μια νέα εγγραφή της μορφής: "charts-info":["metric1","metric2","result1", ... ]
      Αυτό θα περιέχει τις περιγραφές των γραφημάτων, και θα τοποθετούνται με την ίδια σειρα που τοποθετήθηκαν τα charts urls.
      Το charts-info στην ουσία θα χρησιμοποιηθεί σαν τις επιλογές που θα έχει ο χρήστης για να φιλτράρει τα charts που θα βλέπει.
  4. Δεν ξέρω πως θα κινηθούμε με το Monitoring Service άλλα θα πρότεινα να κάνει αντίστοιχη δουλεία με αυτό που περιέγραψα στο προηγούμενο βήμα.
    • Να δημιουργεί στο πεδίο metadata μια νέα εγγραφή της μορφής: "monitoring-charts":["url1", ... ]
    • Καθώς και μια εγγραφή: "monitoring-charts-info":["metric1", ... ]
  5. Και τέλος, ανάλογα με το ποιο κουμπί θα πατήσει ο χρήστης στο βήμα 2, το Visualization Interface θα ανατρέχει στην MongoDB, στο collection Pipelines, και θα εμφανίζει την αντίστοιχη πληροφορία που χρειάζεται.

@konvoulgaris @karamolegkos ρίξτε του μια ματιά στον χρόνο σας και το συζητάμε.

@karamolegkos
Copy link
Member Author

karamolegkos commented Dec 31, 2022

Ξαναχρησιμοποιούμε πλέων το παρακάτω node με τα εξής χαρακτηριστικά:

{
  "title" : "visualization",
  "label" : <a-random-title>
}

Image

Παρακάτω ένα Flow ενός παραδειγματικού Use Case:

  1. To Web Application καλεί τον Orchestrator για μία εφαρμογή ανάλυσης.
    • Το Web Application ελέγχει αν όλα τα visualization titles είναι διαφορετικά για το analysis.
  2. Όταν ο Orchestrator εντοπίζει ένα visualization node (ending node) τότε καλεί το Visualization Service.
  3. To Visualization Service παίρνει ως είσοδο από τον Orchestrator τα παρακάτω:
{
  "analysis-id" : <analysis-id>,
  "job-id" : <job-id>,
  "last-job-id" : <last-job-id>,    # The last job id in orfer to get the metadata from MongoDB made by the other services
  "last-job-title" : <last-job-title>,
  "minio-output" : <minio-output>,
  "minio-input" : <minio-input>
}

Αν χρειάζεται παραπάνω πληροφορία ο @karamolegkos θα επικοινωνήσει με τον @konvoulgaris.
4. To Visualization Service δίνει ως έξοδο τα παρακάτω:
- Εικόνες στο minio-ouput path
- Κάθε εικόνα πρέπει να έχει ως τίτλο το τι δείχνει (Θα χρησιμοποιηθεί στα επόμενα βήματα)
- Ο τρόπος επικοινωνίας του Visualization Service με τον Orchestrator ακολουθεί την λογική και των υπόλοιπων services.

Image

  1. Όταν το Visualization Service ολοκληρώσει, ο Orchestrator κάνει το παρακάτω update στην MongoDB, στην DB: UIDB στο collection: pipelines στο document χρησιμοποιώντας το κλειδί { "analysisid" : <analysis-id> } και προσθέτει το παρακάτω πεδίο:
"visualization" : {
    <vis-1> : [
       'metis/analysis-23415/visualization-11/chart1.html',
       'metis/analysis-23415/visualization-11/chart2.html',
       'metis/analysis-23415/visualization-11/chart3.html',
    ],
    <vis-2> : [
       'metis/analysis-23415/visualization-12/chart1.html',
       'metis/analysis-23415/visualization-12/chart2.html',
       'metis/analysis-23415/visualization-12/chart3.html',
    ],
}
  1. Όταν η εφαρμογή ανάλυσης τελειώσει ο orchestrator προσθέτει στο document του Βήμα 5. το παρακάτω key-value:
{
    "status":"completed"
}

Κατά την ολοκλήρωση της εφαρμογής στο μέλλον θα τοποθετούνται και metrics (we need more reasearh for that) με τον παρακάτω τρόπο στο ίδιο document:

"metrics" : {
    <metric-title-1> : [<minio-path-1>], # Ο τίτλος των αρχείων χρησιμοποιείτε για τον Χρήστη
    <metric-title-2> : [<minio-path-2>] # Ο τίτλος των αρχείων χρησιμοποιείτε για τον Χρήστη
}

@karamolegkos
Copy link
Member Author

@konvoulgaris waiting for confirmation

@konvoulgaris
Copy link

yeah this generally sounds good, im playing around with a library to automatically determine best chart for data. ill be back as soon as i have more info to share

@karamolegkos
Copy link
Member Author

Workflow has been updated for the Web App and Orchestrator connectivity.

@konvoulgaris
Copy link

Autoviz routing finally complete! Moving on to specification synchronicity...

@karamolegkos
Copy link
Member Author

Needs to be deployed.

@karamolegkos
Copy link
Member Author

After a lot of debugging this is working.
Integraded ✔️

@karamolegkos
Copy link
Member Author

It is working good. I suggest to close this issue ✔️.

@karamolegkos
Copy link
Member Author

Remains open until Spark is integrated.

@karamolegkos
Copy link
Member Author

Spark Integrated ✔️.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants