From 09f86e1656ce3ad394802b13f743d1c7750d4775 Mon Sep 17 00:00:00 2001
From: Maho Sasaki
Date: Mon, 9 Nov 2020 20:31:07 -0600
Subject: [PATCH 01/36] prep for production deploy
---
docker-compose-deploy.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docker-compose-deploy.yml b/docker-compose-deploy.yml
index d6627336..5119b98e 100644
--- a/docker-compose-deploy.yml
+++ b/docker-compose-deploy.yml
@@ -30,7 +30,7 @@ services:
environment:
- SUBDOMAINS
- URL
- - STAGING=true # Keep uncommented for dev, comment out for Production use
+ # - STAGING=true # Keep uncommented for dev, comment out for Production use
volumes:
- ./letsencrypt-keys:/config/etc/letsencrypt
- ./letsencrypt/healthcheck.sh:/healthcheck.sh
From 06a2092f0ada808389e8a4d77caba095a01ade3a Mon Sep 17 00:00:00 2001
From: Maho Sasaki
Date: Fri, 11 Jun 2021 12:41:00 -0500
Subject: [PATCH 02/36] add license
---
LICENSE | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
create mode 100644 LICENSE
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000..beb1b352
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 DataJoint Contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
From 4641e13460977ff19f72b1356d07f3a30db0e7f5 Mon Sep 17 00:00:00 2001
From: Maho Sasaki
Date: Fri, 11 Jun 2021 12:44:58 -0500
Subject: [PATCH 03/36] remove unnecessary folder
---
.../archive/testdev.datajoint.io/cert1.pem | 37 ------
.../archive/testdev.datajoint.io/chain1.pem | 27 ----
.../testdev.datajoint.io/fullchain1.pem | 64 ----------
.../archive/testdev.datajoint.io/privkey1.pem | 52 --------
letsencrypt-keys/csr/0000_csr-certbot.pem | 26 ----
letsencrypt-keys/keys/0000_key-certbot.pem | 52 --------
letsencrypt-keys/live/README | 14 ---
.../live/testdev.datajoint.io/README | 14 ---
.../live/testdev.datajoint.io/cert.pem | 1 -
.../live/testdev.datajoint.io/chain.pem | 1 -
.../live/testdev.datajoint.io/fullchain.pem | 1 -
.../priv-fullchain-bundle.pem | 116 ------------------
.../live/testdev.datajoint.io/privkey.pem | 1 -
.../live/testdev.datajoint.io/privkey.pfx | Bin 5613 -> 0 bytes
.../renewal/testdev.datajoint.io.conf | 15 ---
15 files changed, 421 deletions(-)
delete mode 100644 letsencrypt-keys/archive/testdev.datajoint.io/cert1.pem
delete mode 100644 letsencrypt-keys/archive/testdev.datajoint.io/chain1.pem
delete mode 100644 letsencrypt-keys/archive/testdev.datajoint.io/fullchain1.pem
delete mode 100644 letsencrypt-keys/archive/testdev.datajoint.io/privkey1.pem
delete mode 100644 letsencrypt-keys/csr/0000_csr-certbot.pem
delete mode 100644 letsencrypt-keys/keys/0000_key-certbot.pem
delete mode 100644 letsencrypt-keys/live/README
delete mode 100644 letsencrypt-keys/live/testdev.datajoint.io/README
delete mode 120000 letsencrypt-keys/live/testdev.datajoint.io/cert.pem
delete mode 120000 letsencrypt-keys/live/testdev.datajoint.io/chain.pem
delete mode 120000 letsencrypt-keys/live/testdev.datajoint.io/fullchain.pem
delete mode 100644 letsencrypt-keys/live/testdev.datajoint.io/priv-fullchain-bundle.pem
delete mode 120000 letsencrypt-keys/live/testdev.datajoint.io/privkey.pem
delete mode 100644 letsencrypt-keys/live/testdev.datajoint.io/privkey.pfx
delete mode 100644 letsencrypt-keys/renewal/testdev.datajoint.io.conf
diff --git a/letsencrypt-keys/archive/testdev.datajoint.io/cert1.pem b/letsencrypt-keys/archive/testdev.datajoint.io/cert1.pem
deleted file mode 100644
index 3cbaa2a2..00000000
--- a/letsencrypt-keys/archive/testdev.datajoint.io/cert1.pem
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-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
-cKWdJAY=
------END CERTIFICATE-----
diff --git a/letsencrypt-keys/archive/testdev.datajoint.io/chain1.pem b/letsencrypt-keys/archive/testdev.datajoint.io/chain1.pem
deleted file mode 100644
index 0002462c..00000000
--- a/letsencrypt-keys/archive/testdev.datajoint.io/chain1.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
-SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
-GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
-q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
-SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
-Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
-a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
-/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
-AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
-CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
-bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
-c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
-VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
-ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
-MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
-Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
-AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
-uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
-wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
-X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
-PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
-KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
------END CERTIFICATE-----
diff --git a/letsencrypt-keys/archive/testdev.datajoint.io/fullchain1.pem b/letsencrypt-keys/archive/testdev.datajoint.io/fullchain1.pem
deleted file mode 100644
index 75032878..00000000
--- a/letsencrypt-keys/archive/testdev.datajoint.io/fullchain1.pem
+++ /dev/null
@@ -1,64 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGYTCCBUmgAwIBAgISBPNoWkn3Jak0S7uy+V+h+MO2MA0GCSqGSIb3DQEBCwUA
-MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
-ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTEwMDEwMDE3MThaFw0x
-OTEyMzAwMDE3MThaMB8xHTAbBgNVBAMTFHRlc3RkZXYuZGF0YWpvaW50LmlvMIIC
-IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1hw4tfoAfFGlQp2r8ELB9pVI
-XRH7fziaozrHanQto4kILQbMmBXrnodq6L4mWg5aPMw1X1ua4w33Qym+UFSYVcf3
-EGtfL9Ky5yIDgNtVXVEoekjhGFtyWZS94nINrgsUccic6jtw6yj3NL0TAn2JUDBc
-zErOemDAs3MZuz8+oSy9Jhb1Aim/W7zUj/MVhqtUFXz3TcOQKRPqlX08cuf7A70M
-vGW4634DE0CJ6XVuPo+9kiBpEFaxQJpTFQf1tPxuv2lwpte5Lu+/nYFHGL5mYwrY
-XeorODPh3E8jo2bptSyuGkgs/yU1H3jBEtA22icnyeWg2zUnkThz29jYifeEXusc
-sF63VPUCZUKfXE6h5TqQTrhjpWz8D+RVwjjRuRkdSIQWU70TDQR5jqiYrwinyEqZ
-5OGX3fn8Tjw8fMDY2jWGfmyf5iiM1GI6HGneBNn0qGodTWigOqs54CByBvYY6bY7
-O7Ad2G2jG6AzQWT0a8mpZHULmhjsnSe3pStHwDT8jHAw24LMxTgVOmtAmoIMtOeS
-UYu7BGQNGK4SJ4D2y7qp1lBfFxtKfGn3uXPloSKi18CNh1l2CXmtDJU4V6ulB3hs
-0bvqWHU29Wr5IULO0JI5qlvryjJb1Mvthu4Pps69M7FNnVTjD3zCfm1cV6Lf+UkN
-4rfOW/KN54unHKGPV98CAwEAAaOCAmowggJmMA4GA1UdDwEB/wQEAwIFoDAdBgNV
-HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4E
-FgQUFxVi26glRrnLy9ed05Hos2sGENYwHwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3
-pkVl7/Oo7KEwbwYIKwYBBQUHAQEEYzBhMC4GCCsGAQUFBzABhiJodHRwOi8vb2Nz
-cC5pbnQteDMubGV0c2VuY3J5cHQub3JnMC8GCCsGAQUFBzAChiNodHRwOi8vY2Vy
-dC5pbnQteDMubGV0c2VuY3J5cHQub3JnLzAfBgNVHREEGDAWghR0ZXN0ZGV2LmRh
-dGFqb2ludC5pbzBMBgNVHSAERTBDMAgGBmeBDAECATA3BgsrBgEEAYLfEwEBATAo
-MCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCCAQUGCisG
-AQQB1nkCBAIEgfYEgfMA8QB2AHR+2oMxrTMQkSGcziVPQnDCv/1eQiAIxjc1eeYQ
-e8xWAAABbYTknd0AAAQDAEcwRQIhAMMnlbRmjEPGTk9y41XXEQ0IEpGqEs7PGpTR
-Zultzb1iAiBF3Vvzf97Yj8GTc3XNfNQV7Ds5u9iKyl5JRdxf4omkdwB3ACk8UZZU
-yDlluqpQ/FgH1Ldvv1h6KXLcpMMM9OVFR/R4AAABbYTknckAAAQDAEgwRgIhAMJZ
-Lo0F7F8vHvifboWm78525A2uRhYrnnNjiRGhdfA1AiEAt5kUK4IWVYUOahIFQdLM
-Jyy57joT2VSI8+J9KAQSts8wDQYJKoZIhvcNAQELBQADggEBAFYbObFidVihKioN
-xCjBBieWBs0tXW4GpCnPQkA82mW9ODaUJethMIfL5JpZuUkB0IP5ydcO5n4AkWON
-PL38o/dXuPM4SbUBpwcRq13aWw5oFIrl2zYUhusbTymAP7jyyrPjrjFOGL20ukFZ
-qq+E9F1NzD0zynqGA3r91v1J8CjdsqS67aRn63ZT120zkvtUfB3mOroFXcGNOZX0
-cQ6gO6nl+gF6Me6Lp6VOz/r2TdnfK9IqBaMhZ1SnMzce8eVsdnbPVg7piZXvNsPG
-OK4V7A6FB2RaSKeg5RGMGDVNbdZCpviYAfCwQXPm/5MPG9TY5bv7Zpnmcc0KSJgg
-cKWdJAY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
-SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
-GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
-q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
-SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
-Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
-a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
-/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
-AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
-CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
-bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
-c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
-VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
-ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
-MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
-Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
-AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
-uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
-wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
-X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
-PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
-KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
------END CERTIFICATE-----
diff --git a/letsencrypt-keys/archive/testdev.datajoint.io/privkey1.pem b/letsencrypt-keys/archive/testdev.datajoint.io/privkey1.pem
deleted file mode 100644
index 51a94970..00000000
--- a/letsencrypt-keys/archive/testdev.datajoint.io/privkey1.pem
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-LihchMCL8vDrMavUwxYPydxwALUrvA==
------END PRIVATE KEY-----
diff --git a/letsencrypt-keys/csr/0000_csr-certbot.pem b/letsencrypt-keys/csr/0000_csr-certbot.pem
deleted file mode 100644
index 0f5e8268..00000000
--- a/letsencrypt-keys/csr/0000_csr-certbot.pem
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIIEdzCCAl8CAQIwADCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANYc
-OLX6AHxRpUKdq/BCwfaVSF0R+384mqM6x2p0LaOJCC0GzJgV656Haui+JloOWjzM
-NV9bmuMN90MpvlBUmFXH9xBrXy/SsuciA4DbVV1RKHpI4RhbclmUveJyDa4LFHHI
-nOo7cOso9zS9EwJ9iVAwXMxKznpgwLNzGbs/PqEsvSYW9QIpv1u81I/zFYarVBV8
-903DkCkT6pV9PHLn+wO9DLxluOt+AxNAiel1bj6PvZIgaRBWsUCaUxUH9bT8br9p
-cKbXuS7vv52BRxi+ZmMK2F3qKzgz4dxPI6Nm6bUsrhpILP8lNR94wRLQNtonJ8nl
-oNs1J5E4c9vY2In3hF7rHLBet1T1AmVCn1xOoeU6kE64Y6Vs/A/kVcI40bkZHUiE
-FlO9Ew0EeY6omK8Ip8hKmeThl935/E48PHzA2No1hn5sn+YojNRiOhxp3gTZ9Khq
-HU1ooDqrOeAgcgb2GOm2OzuwHdhtoxugM0Fk9GvJqWR1C5oY7J0nt6UrR8A0/Ixw
-MNuCzMU4FTprQJqCDLTnklGLuwRkDRiuEieA9su6qdZQXxcbSnxp97lz5aEiotfA
-jYdZdgl5rQyVOFerpQd4bNG76lh1NvVq+SFCztCSOapb68oyW9TL7YbuD6bOvTOx
-TZ1U4w98wn5tXFei3/lJDeK3zlvyjeeLpxyhj1ffAgMBAAGgMjAwBgkqhkiG9w0B
-CQ4xIzAhMB8GA1UdEQQYMBaCFHRlc3RkZXYuZGF0YWpvaW50LmlvMA0GCSqGSIb3
-DQEBCwUAA4ICAQBsStP169iWOrPwDJQUCgTuJaJSbY4ykN/ldm9CLSOKOGxB6pVu
-MI91DFhSzwE55cGYsUd5dWEY+dFYym9/FLRccmbSpv9iD60/RA3LScZ8Cxf44NEv
-eNiGCToT7YweQq7VHlDIIOzeaXQEzSDwOgEjAzn/t7UrENZBF7gf1vlZlTlv71Ak
-EK/JXpzdJalvsjYKWqhBecwnJ1ALc8eYlBMZ5x9NJpWA5j/1aq9QNSYvpSRx5U0g
-nKBhONUuS6N0bGWK9yVwPGrE2E4qNfyM4my1w8AmmrPyGYwtJpZzJzWPZ6YdQ4aN
-PMKa4vGzf9ZSuK6EE2t+z4nvstCdKHhx/jI0OwUZVqqotkm2MWd4yKbC5a5qWnkx
-Xg9SdOj5QulBnp9FhUIx0IRJj1/spb+CX7KNmPkv7e1O1Gg/OeNWXygtfGA3WEi7
-AuJxYnGTHhX9Ijpw9B+STUN+uS/3uPNq5JtPdwbxA3TDYOGECj2620j5WlY/qzDf
-Y7WA4ZZKGMaTyaJggvWItwKk8PwHkPpZMRxyVQzZIBxB9LbRiibD/Oldygt48eI2
-F0HNVbBFLSG8EtZLPT0UeXzNqJ/21XsXHYxjrHqaeBaWX0YmjqAQytG+Q+hvdV6O
-TTieZ5+zGeeBOdCATvzmQ73sGqT1Kj3JQWMJDKFmteRPmFPNDUIMnNTSYQ==
------END CERTIFICATE REQUEST-----
diff --git a/letsencrypt-keys/keys/0000_key-certbot.pem b/letsencrypt-keys/keys/0000_key-certbot.pem
deleted file mode 100644
index 51a94970..00000000
--- a/letsencrypt-keys/keys/0000_key-certbot.pem
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-LihchMCL8vDrMavUwxYPydxwALUrvA==
------END PRIVATE KEY-----
diff --git a/letsencrypt-keys/live/README b/letsencrypt-keys/live/README
deleted file mode 100644
index 00b733c7..00000000
--- a/letsencrypt-keys/live/README
+++ /dev/null
@@ -1,14 +0,0 @@
-This directory contains your keys and certificates.
-
-`[cert name]/privkey.pem` : the private key for your certificate.
-`[cert name]/fullchain.pem`: the certificate file used in most server software.
-`[cert name]/chain.pem` : used for OCSP stapling in Nginx >=1.3.7.
-`[cert name]/cert.pem` : will break many server configurations, and should not be used
- without reading further documentation (see link below).
-
-WARNING: DO NOT MOVE OR RENAME THESE FILES!
- Certbot expects these files to remain in this location in order
- to function properly!
-
-We recommend not moving these files. For more information, see the Certbot
-User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.
diff --git a/letsencrypt-keys/live/testdev.datajoint.io/README b/letsencrypt-keys/live/testdev.datajoint.io/README
deleted file mode 100644
index 5050078f..00000000
--- a/letsencrypt-keys/live/testdev.datajoint.io/README
+++ /dev/null
@@ -1,14 +0,0 @@
-This directory contains your keys and certificates.
-
-`privkey.pem` : the private key for your certificate.
-`fullchain.pem`: the certificate file used in most server software.
-`chain.pem` : used for OCSP stapling in Nginx >=1.3.7.
-`cert.pem` : will break many server configurations, and should not be used
- without reading further documentation (see link below).
-
-WARNING: DO NOT MOVE OR RENAME THESE FILES!
- Certbot expects these files to remain in this location in order
- to function properly!
-
-We recommend not moving these files. For more information, see the Certbot
-User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.
diff --git a/letsencrypt-keys/live/testdev.datajoint.io/cert.pem b/letsencrypt-keys/live/testdev.datajoint.io/cert.pem
deleted file mode 120000
index bab4ce48..00000000
--- a/letsencrypt-keys/live/testdev.datajoint.io/cert.pem
+++ /dev/null
@@ -1 +0,0 @@
-../../archive/testdev.datajoint.io/cert1.pem
\ No newline at end of file
diff --git a/letsencrypt-keys/live/testdev.datajoint.io/chain.pem b/letsencrypt-keys/live/testdev.datajoint.io/chain.pem
deleted file mode 120000
index c9e5f6e5..00000000
--- a/letsencrypt-keys/live/testdev.datajoint.io/chain.pem
+++ /dev/null
@@ -1 +0,0 @@
-../../archive/testdev.datajoint.io/chain1.pem
\ No newline at end of file
diff --git a/letsencrypt-keys/live/testdev.datajoint.io/fullchain.pem b/letsencrypt-keys/live/testdev.datajoint.io/fullchain.pem
deleted file mode 120000
index b261b995..00000000
--- a/letsencrypt-keys/live/testdev.datajoint.io/fullchain.pem
+++ /dev/null
@@ -1 +0,0 @@
-../../archive/testdev.datajoint.io/fullchain1.pem
\ No newline at end of file
diff --git a/letsencrypt-keys/live/testdev.datajoint.io/priv-fullchain-bundle.pem b/letsencrypt-keys/live/testdev.datajoint.io/priv-fullchain-bundle.pem
deleted file mode 100644
index 415fd30f..00000000
--- a/letsencrypt-keys/live/testdev.datajoint.io/priv-fullchain-bundle.pem
+++ /dev/null
@@ -1,116 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-LihchMCL8vDrMavUwxYPydxwALUrvA==
------END PRIVATE KEY-----
------BEGIN CERTIFICATE-----
-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
-cKWdJAY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
-SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
-GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
-q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
-SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
-Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
-a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
-/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
-AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
-CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
-bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
-c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
-VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
-ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
-MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
-Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
-AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
-uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
-wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
-X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
-PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
-KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
------END CERTIFICATE-----
diff --git a/letsencrypt-keys/live/testdev.datajoint.io/privkey.pem b/letsencrypt-keys/live/testdev.datajoint.io/privkey.pem
deleted file mode 120000
index f819d687..00000000
--- a/letsencrypt-keys/live/testdev.datajoint.io/privkey.pem
+++ /dev/null
@@ -1 +0,0 @@
-../../archive/testdev.datajoint.io/privkey1.pem
\ No newline at end of file
diff --git a/letsencrypt-keys/live/testdev.datajoint.io/privkey.pfx b/letsencrypt-keys/live/testdev.datajoint.io/privkey.pfx
deleted file mode 100644
index ace7291f0477a2e77d367c90530ecf4feb03f56d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5613
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
CkIgm!
diff --git a/letsencrypt-keys/renewal/testdev.datajoint.io.conf b/letsencrypt-keys/renewal/testdev.datajoint.io.conf
deleted file mode 100644
index 4ffdca1b..00000000
--- a/letsencrypt-keys/renewal/testdev.datajoint.io.conf
+++ /dev/null
@@ -1,15 +0,0 @@
-# renew_before_expiry = 30 days
-version = 0.38.0
-archive_dir = /etc/letsencrypt/archive/testdev.datajoint.io
-cert = /etc/letsencrypt/live/testdev.datajoint.io/cert.pem
-privkey = /etc/letsencrypt/live/testdev.datajoint.io/privkey.pem
-chain = /etc/letsencrypt/live/testdev.datajoint.io/chain.pem
-fullchain = /etc/letsencrypt/live/testdev.datajoint.io/fullchain.pem
-
-# Options used in the renewal process
-[renewalparams]
-account = b78f9f453ca52340095dbede9324c9fe
-rsa_key_size = 4096
-pref_challs = http-01,
-server = https://acme-v02.api.letsencrypt.org/directory
-authenticator = standalone
From 44d456b155f3e7fb9b7f524c61a102a19fd82f25 Mon Sep 17 00:00:00 2001
From: mahos
Date: Fri, 11 Jun 2021 13:29:36 -0500
Subject: [PATCH 04/36] Update docker-compose-deploy.yml
Co-authored-by: Raphael Guzman <38401847+guzman-raphael@users.noreply.github.com>
---
docker-compose-deploy.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docker-compose-deploy.yml b/docker-compose-deploy.yml
index 5119b98e..d6627336 100644
--- a/docker-compose-deploy.yml
+++ b/docker-compose-deploy.yml
@@ -30,7 +30,7 @@ services:
environment:
- SUBDOMAINS
- URL
- # - STAGING=true # Keep uncommented for dev, comment out for Production use
+ - STAGING=true # Keep uncommented for dev, comment out for Production use
volumes:
- ./letsencrypt-keys:/config/etc/letsencrypt
- ./letsencrypt/healthcheck.sh:/healthcheck.sh
From b81a9b654ccd5b87075537f3dbcfa789d6c0f0af Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Thu, 21 Oct 2021 11:41:16 -0500
Subject: [PATCH 05/36] Saving work in progress
---
backend/iblapi.py | 31 +++++++++++++++----
ibl-frontend/dev.dockerfile | 4 ++-
.../src/environments/environment.prod.ts | 2 +-
node_server/app.js | 20 +++++++++++-
4 files changed, 48 insertions(+), 9 deletions(-)
diff --git a/backend/iblapi.py b/backend/iblapi.py
index b20e5c8f..f0554cc7 100644
--- a/backend/iblapi.py
+++ b/backend/iblapi.py
@@ -168,13 +168,15 @@ def do_req(subpath):
pathparts = request.path.split('/')[2:] # ['', 'v0'] [ ... ]
obj = pathparts[0]
values = request.values
+ print(f"\n\n\n\nValues: {values}\n\n\n\n")
postargs, jsonargs = {}, None
# construct kwargs
kwargs = {'as_dict': True}
- limit = int(request.values['__limit']) if '__limit' in values else None
- order = request.values['__order'] if '__order' in values else None
+ limit = int(request.values['__limit']) if '__limit' in values else 25
+ order = request.values['__order'] if '__order' in values else 'KEY ASC'
+ page = int(request.values['__page']) if '__page' in values else 1
proj = json.loads(request.values['__proj']) if '__proj' in values else None
- special_fields = ['__json', '__limit', '__order', '__proj', '__json_kwargs']
+ special_fields = ['__json', '__limit', '__order', '__proj', '__json_kwargs', '__page']
for a in (v for v in values if v not in special_fields):
# HACK: 'uuid' attrs -> UUID type (see also: datajoint-python #594)
postargs[a] = UUID(values[a]) if 'uuid' in a else values[a]
@@ -188,9 +190,10 @@ def do_req(subpath):
args = {} if not args else dj.AndList(args)
kwargs = {k: v for k, v in (('as_dict', True,),
('limit', limit,),
- ('order_by', order,)) if v is not None}
+ ('order_by', order,),
+ ('offset', (page-1)*limit)) if v is not None}
# 2) and dispatch
- app.logger.debug("args: '{}', kwargs: {}".format(args, kwargs))
+ app.logger.info("args: '{}', kwargs: {}".format(args, kwargs))
if obj not in reqmap:
abort(404)
elif obj == '_q':
@@ -209,12 +212,15 @@ def do_req(subpath):
return dumps(fetched)
# return dumps(q.fetch(**kwargs))
+# def handle_q(subpath, args, proj, fetch_args=None, limit: int = 10, page: int = 1, **kwargs):
def handle_q(subpath, args, proj, fetch_args=None, **kwargs):
'''
special queries (under '/_q/ URL Space)
- for sessionpage, provide:
((session * subject * lab * user) & arg).proj(flist)
'''
+
+ app.logger.info("\n\n\nthe value for limit is: {}\n\n\n".format(request.args))
app.logger.info("handle_q: subpath: '{}', args: {}".format(subpath, args))
app.logger.info('key words: {}'.format(kwargs))
@@ -267,9 +273,22 @@ def handle_q(subpath, args, proj, fetch_args=None, **kwargs):
q = ((acquisition.Session() * sess_proj * psych_curve * ephys_data * subject.Subject() *
subject.SubjectLab() * subject.SubjectUser() * trainingStatus) & args & brain_restriction)
+ # newLimit = int(request.args.get("limit", 10))
+ # page = int(request.args.get("page", 1))
+
+ app.logger.info('\n\n\n\n\nFetch Args: {}\n\n\n\n'.format(fetch_args))
+ q = q.proj(*proj) if proj else q
+
dj.conn().query("SET SESSION max_join_size={}".format('18446744073709551615'))
- q = q.proj(*proj).fetch(**fetch_args) if proj else q.fetch(**fetch_args)
+ # q = q.proj(*proj).fetch(limit=newLimit, offset=(page-1)*limit, **fetch_args) if proj else q.fetch(limit=newLimit, offset=(page-1)*limit, **fetch_args)
+
+ ret_count = len(q)
+
+ ret = q.fetch(**fetch_args)
+
dj.conn().query("SET SESSION max_join_size={}".format(original_max_join_size))
+
+ return dumps({"records_count": ret_count, "records": ret})
elif subpath == 'subjpage':
proj_restr = None
for e in args:
diff --git a/ibl-frontend/dev.dockerfile b/ibl-frontend/dev.dockerfile
index bf40ba09..7d13a0a0 100644
--- a/ibl-frontend/dev.dockerfile
+++ b/ibl-frontend/dev.dockerfile
@@ -14,7 +14,9 @@ RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
# CMD tail -f /dev/null
-CMD ["/app/node_modules/@angular/cli/bin/ng","serve","--host","0.0.0.0","--port","9000","--disable-host-check"]
+# CMD ["/app/node_modules/@angular/cli/bin/ng","serve","--host","0.0.0.0","--port","9000","--disable-host-check"]
+
+CMD ["node", "--max_old_space_size=5120", "/app/node_modules/@angular/cli/bin/ng","serve","--host","0.0.0.0","--port","9000","--disable-host-check"]
WORKDIR /app
diff --git a/ibl-frontend/frontend-content/src/environments/environment.prod.ts b/ibl-frontend/frontend-content/src/environments/environment.prod.ts
index e0dc2ff6..0f9c6cf1 100644
--- a/ibl-frontend/frontend-content/src/environments/environment.prod.ts
+++ b/ibl-frontend/frontend-content/src/environments/environment.prod.ts
@@ -1,6 +1,6 @@
export const environment = {
production: true,
// api_url: '$PROD_NODE_API',
- backend_url: '$PROD_NODE_BACKEND'
+ backend_url: 'https://fakeservices.datajoint.io/api'
};
// before deploying, make sure backend_url part is backend_url: '(dollar)PROD_NODE_BACKEND'
\ No newline at end of file
diff --git a/node_server/app.js b/node_server/app.js
index 222c31a6..63dfbffe 100644
--- a/node_server/app.js
+++ b/node_server/app.js
@@ -191,8 +191,19 @@ app.get('/sessions', checkAuth, (req, res) => {
app.post('/sessions', checkAuth, cacheMiddleware(15*60), (req, res) => {
// console.log('posting to filter session page');
- console.log('req.body: ', req.body)
+ console.log('\n\n\n\nreq.body: \n\n\n\n', req.body)
console.log('type: ', typeof req.body)
+ console.log('\n\n\n\nlimit value\n\n\n', req.query.__limit[0])
+ console.log('\n\n\n\npage value\n\n\n', req.query.__page[0])
+ console.log('\n\n\n\norder value\n\n\n', req.query.__order)
+ console.log('\n\n\n\n\n\nparams\n\n\n\n\n\n\n', req.params)
+ // res.append('__limit', req.query.__limit[0])
+ // res.append('__page', req.query.__page[0])
+ // res.append('__order', req.body)
+ res.set({
+ '__limit': req.query.__limit[0],
+ '__page': req.query.__page[0]
+ })
request.post(flask_backend + '/v0/_q/sessionpage', { form: req.body }, function (error, httpResponse, body) {
if (error) {
console.error('error [session list fetch]: ', error);
@@ -200,6 +211,13 @@ app.post('/sessions', checkAuth, cacheMiddleware(15*60), (req, res) => {
return;
}
// console.log(body);
+ // res.append('__limit', req.query.__limit[0])
+ // res.append('__page', req.query.__page[0])
+ // res.append('__order', req.body)
+ // res.set({
+ // '__limit': req.query.__limit[0],
+ // '__page': req.query.__page[0]
+ // })
res.send(body);
})
})
From dde5c6be37f8fe99246efbb5b4bc46110ec87a9d Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 25 Oct 2021 10:03:09 -0500
Subject: [PATCH 06/36] Records in allSessions
---
.../app/session-list/session-list.component.ts | 4 ++++
node_server/app.js | 17 +++++++++--------
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
index 16b25eb4..ebe29e9a 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
@@ -363,8 +363,12 @@ export class SessionListComponent implements OnInit, OnDestroy {
// Add the default sorting for the api request
filters['__order'] = 'session_start_time DESC';
+ // filters['__page'] = this.pageIndex
+ // filters['__limit'] = this.pageSize
this.allSessions = await this.allSessionsService.fetchSessions(filters).toPromise();
+ this.allSessions = this.allSessions['records'];
+ //record count json and assign it here
}
setDropDownFormOptions(dropDownMenuOptionKey, formControl: AbstractControl, key: string) {
diff --git a/node_server/app.js b/node_server/app.js
index 63dfbffe..0eda4dcf 100644
--- a/node_server/app.js
+++ b/node_server/app.js
@@ -193,17 +193,18 @@ app.post('/sessions', checkAuth, cacheMiddleware(15*60), (req, res) => {
// console.log('posting to filter session page');
console.log('\n\n\n\nreq.body: \n\n\n\n', req.body)
console.log('type: ', typeof req.body)
- console.log('\n\n\n\nlimit value\n\n\n', req.query.__limit[0])
- console.log('\n\n\n\npage value\n\n\n', req.query.__page[0])
- console.log('\n\n\n\norder value\n\n\n', req.query.__order)
- console.log('\n\n\n\n\n\nparams\n\n\n\n\n\n\n', req.params)
+ // console.log('\n\n\n\nlimit value\n\n\n', req.query)
+ // console.log('\n\n\n\nlimit value\n\n\n', req.query.__limit[0])
+ // console.log('\n\n\n\npage value\n\n\n', req.query.__page[0])
+ // console.log('\n\n\n\norder value\n\n\n', req.query.__order)
+ // console.log('\n\n\n\n\n\nparams\n\n\n\n\n\n\n', req.params)
// res.append('__limit', req.query.__limit[0])
// res.append('__page', req.query.__page[0])
// res.append('__order', req.body)
- res.set({
- '__limit': req.query.__limit[0],
- '__page': req.query.__page[0]
- })
+ // res.set({
+ // '__limit': req.query.__limit[0],
+ // '__page': req.query.__page[0]
+ // })
request.post(flask_backend + '/v0/_q/sessionpage', { form: req.body }, function (error, httpResponse, body) {
if (error) {
console.error('error [session list fetch]: ', error);
From 297b89745170093c84bbe8f49c54545bbcbb01d2 Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Tue, 26 Oct 2021 10:02:04 -0500
Subject: [PATCH 07/36] Paging works, but sorting doesn't.
---
.../app/session-list/GithubApiInterface.ts | 6 +++
.../app/session-list/GithubIssueInterface.ts | 20 ++++++++
.../app/session-list/all-sessions.service.ts | 11 +++-
.../session-list/session-list.component.html | 5 +-
.../session-list/session-list.component.ts | 50 +++++++++++++++++--
5 files changed, 86 insertions(+), 6 deletions(-)
create mode 100644 ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts
create mode 100644 ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts
diff --git a/ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts b/ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts
new file mode 100644
index 00000000..7cbb7405
--- /dev/null
+++ b/ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts
@@ -0,0 +1,6 @@
+import { GithubIssue } from "./GithubIssueInterface";
+
+export interface GithubApi {
+ records: GithubIssue[];
+ records_count: number;
+ }
\ No newline at end of file
diff --git a/ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts b/ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts
new file mode 100644
index 00000000..83cf47f0
--- /dev/null
+++ b/ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts
@@ -0,0 +1,20 @@
+export interface GithubIssue {
+ mouse_id: number;
+ session_date: string;
+ session_lab: string;
+ subject_nickname: string;
+ subject_birth_date: string;
+ session_start_time: string;
+ task_protocol: string;
+ subject_line: string;
+ responsible_user: string;
+ session_uuid: string;
+ sex: string;
+ subject_uuid: string;
+ nplot: string;
+ nprobe: string;
+ session_project: string;
+ good4bmap: string;
+ }
+
+
\ No newline at end of file
diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
index 167183d8..0b2530fa 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
@@ -1,6 +1,8 @@
import { Injectable } from '@angular/core';
-import { Subject } from 'rxjs';
+import { Subject, Observable } from 'rxjs';
import { HttpClient } from '@angular/common/http';
+import { GithubApi } from './GithubApiInterface';
+import { GithubIssue } from './GithubIssueInterface';
import { environment } from '../../environments/environment';
@@ -36,6 +38,13 @@ export class AllSessionsService {
return this.http.post(BACKEND_API_URL + '/sessions/', sessionFilters, { responseType: 'json'})
}
+ getRepoIssues(body: Object): Observable {
+ const requestUrl = 'https://fakeservices.datajoint.io/api/sessions';
+
+
+ return this.http.post(requestUrl, body, { responseType: 'json' });
+ }
+
getAllSessions() {
let start = new Date();
this.http.get(BACKEND_API_URL + `/sessions`)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
index 8ef7302e..09fdae3a 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
@@ -238,7 +238,7 @@
-
+
-
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
index ebe29e9a..13946acb 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
@@ -1,8 +1,9 @@
import { Component, OnInit, OnDestroy, ViewChild, Input } from '@angular/core';
+import {HttpClient} from '@angular/common/http';
import { FormControl, FormGroup, FormArray, AbstractControl} from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
-import { Subscription, Observable } from 'rxjs';
-import { map, startWith } from 'rxjs/operators';
+import { Subscription, Observable, merge, of as observableOf } from 'rxjs';
+import { map, startWith, catchError, switchMap } from 'rxjs/operators';
import { MatTreeNestedDataSource } from '@angular/material/tree';
import { MatPaginator} from '@angular/material/paginator';
import { MatTableDataSource } from '@angular/material/table';
@@ -12,6 +13,7 @@ import { FilterStoreService } from '../filter-store.service';
import * as moment from 'moment';
import * as _ from 'lodash';
import { NestedTreeControl } from '@angular/cdk/tree';
+import { GithubIssue } from './GithubIssueInterface';
enum Sex {
@@ -112,12 +114,18 @@ export class SessionListComponent implements OnInit, OnDestroy {
selectedSession = {};
+ exampleDatabase: AllSessionsService | null;
+ data: GithubIssue[] = [];
+ resultsLength = 0;
+ isLoadingResults = true;
+ isRateLimitReached = false;
+
private sessionsSubscription: Subscription;
private sessionMenuSubscription: Subscription;
private allSessionMenuSubscription: Subscription;
private reqSessionsSubscription: Subscription;
- constructor(private route: ActivatedRoute, private router: Router, public allSessionsService: AllSessionsService, public filterStoreService: FilterStoreService) {
+ constructor(private route: ActivatedRoute, private router: Router, public allSessionsService: AllSessionsService, public filterStoreService: FilterStoreService, private _httpClient: HttpClient) {
this.treeDataSource.data = this.brainRegionTree
// Initalized the material table
this.dataSource = new MatTableDataSource();
@@ -322,6 +330,41 @@ export class SessionListComponent implements OnInit, OnDestroy {
this.buildLookup();
})
}
+
+ ngAfterViewInit() {
+ this.exampleDatabase = new AllSessionsService(this._httpClient);
+
+ // If the user changes the sort order, reset back to the first page.
+ this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);
+
+ merge(this.sort.sortChange, this.paginator.page)
+ .pipe(
+ startWith({}),
+ switchMap(() => {
+ this.isLoadingResults = true;
+ return this.exampleDatabase!.getRepoIssues(
+ {"__page": this.paginator.pageIndex + 1})
+ .pipe(catchError(() => observableOf(null)));
+ }),
+ map(data => {
+ // Flip flag to show that loading has finished.
+ this.isLoadingResults = false;
+ this.isRateLimitReached = data === null;
+
+ if (data === null) {
+ return [];
+ }
+
+ // Only refresh the result length if there is new data. In case of rate
+ // limit errors, we do not want to reset the paginator to zero, as that
+ // would prevent users from re-triggering requests.
+ this.resultsLength = data.records_count;
+ console.log("data githubIssue" + data.records)
+ console.log("length " + this.resultsLength)
+ return data.records;
+ })
+ ).subscribe(data => this.data = data);
+ }
ngOnDestroy() {
// Store paginator, sort, buttons, and sessions
@@ -368,6 +411,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
this.allSessions = await this.allSessionsService.fetchSessions(filters).toPromise();
this.allSessions = this.allSessions['records'];
+ console.log("\n\n\n\nSESSIONS: " + this.allSessions + " \n\n\n\n")
//record count json and assign it here
}
From f58e7b8e7fb86d779551240e7e8a4dc977bfbb75 Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Wed, 27 Oct 2021 15:49:17 -0500
Subject: [PATCH 08/36] Paging, filtering, sorting completed (minus range)
---
backend/iblapi.py | 14 ++-
.../session-list/session-list.component.ts | 119 +++++++++++++++++-
2 files changed, 123 insertions(+), 10 deletions(-)
diff --git a/backend/iblapi.py b/backend/iblapi.py
index f0554cc7..e447b50d 100644
--- a/backend/iblapi.py
+++ b/backend/iblapi.py
@@ -172,7 +172,7 @@ def do_req(subpath):
postargs, jsonargs = {}, None
# construct kwargs
kwargs = {'as_dict': True}
- limit = int(request.values['__limit']) if '__limit' in values else 25
+ limit = int(request.values['__limit']) if '__limit' in values else None
order = request.values['__order'] if '__order' in values else 'KEY ASC'
page = int(request.values['__page']) if '__page' in values else 1
proj = json.loads(request.values['__proj']) if '__proj' in values else None
@@ -188,10 +188,14 @@ def do_req(subpath):
if '__json_kwargs' in values:
json_kwargs = json.loads(request.values['__json_kwargs'])
args = {} if not args else dj.AndList(args)
- kwargs = {k: v for k, v in (('as_dict', True,),
- ('limit', limit,),
- ('order_by', order,),
- ('offset', (page-1)*limit)) if v is not None}
+ if limit == None:
+ kwargs = {k: v for k, v in (('as_dict', True,),
+ ('order_by', order,)) if v is not None}
+ else:
+ kwargs = {k: v for k, v in (('as_dict', True,),
+ ('limit', limit,),
+ ('order_by', order,),
+ ('offset', (page-1)*limit)) if v is not None}
# 2) and dispatch
app.logger.info("args: '{}', kwargs: {}".format(args, kwargs))
if obj not in reqmap:
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
index 13946acb..20f79d83 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
@@ -179,6 +179,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
if (key === '__json') {
// If key is __json than to reformat to IBL API format
const JSONcontent = JSON.parse(params[key]);
+
const dateRange = ['', '']; // First value is start date, second value is end date
// Loop through each item in JSON Content and figgure out it is a date or a gender
@@ -252,6 +253,10 @@ export class SessionListComponent implements OnInit, OnDestroy {
}
}
+
+
+
+
// Check storage to see if there is anything there
// Check for paginator
if (this.filterStoreService.sessionPaginator) {
@@ -287,10 +292,12 @@ export class SessionListComponent implements OnInit, OnDestroy {
// Check for preloaded sessions
if (this.filterStoreService.loadedSessions) {
// We have previously loaded sessions, thus just use that
+ console.log(this.filterStoreService.loadedSessions);
this.allSessions = this.filterStoreService.loadedSessions;
}
else {
// Else fetch from database
+ console.log('in ngOnIt fetchSessions')
await this.fetchSessions();
this.initialLoad = false;
}
@@ -298,17 +305,20 @@ export class SessionListComponent implements OnInit, OnDestroy {
// Check if there are params, if they are then apply them via this.applyFilter();
if (params !== undefined && Object.keys(params).length !== 0) {
// There are params, thus apply the filter and get the restricted sessions
+ console.log(params)
this.restrictedSessions = await this.applyFilter();
+ console.log(this.restrictedSessions)
}
else {
// There are no params so just set restricted Session to all sessions
+ console.log(this.restrictedSessions)
this.restrictedSessions = this.allSessions
}
// Create Menu, Update table view and set loading to false
this.createMenu(this.restrictedSessions);
- this.updateTableView(this.restrictedSessions);
+ //this.updateTableView(this.restrictedSessions);
this.isLoading = false;
if (this.filterStoreService.sessionPaginator) {
@@ -318,6 +328,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
this.dataSource.paginator = this.paginator
}
+ console.log("update selection")
this.updateSelection();
});
@@ -337,13 +348,83 @@ export class SessionListComponent implements OnInit, OnDestroy {
// If the user changes the sort order, reset back to the first page.
this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);
+ let newObject = {};
+
merge(this.sort.sortChange, this.paginator.page)
.pipe(
startWith({}),
switchMap(() => {
+ if(this.sort.direction == ''){
+ this.sort.active = 'session_start_time';
+ this.sort.direction = 'desc'
+ }
+ let filter = Object.assign({}, this.session_filter_form.getRawValue());
+ console.log(`filter: ${JSON.stringify(filter)}`);
+ let newFilter = JSON.stringify(filter)
+ console.log(Object.entries(filter))
+
+ for (const [key, value] of Object.entries(filter)) {
+ if(key == 'sex'){
+ console.log("\n\ntypeof sex", typeof(value))
+ if(value[0] == true){
+ newObject[key] = 'F'
+ //female
+ continue
+ }
+ else if (value[1] == true){
+ newObject[key] = 'M'
+ //male
+ continue
+ }
+ else if (value[2] == true){
+ newObject[key] = 'U'
+ //undefined
+ continue
+ }
+ else{
+ continue
+ }
+
+ // for( const [key2, val] of Object.entries(value)){
+ // console.log("inside sex value")
+ // console.log(`${key2}: ${val}`)
+ // if(val == 'true')
+ // console.log(`\n\nSex Value: ${val}\n\n`)
+ // console.log(`\n\nkey2`)
+ // newObject[key2] = val
+ // continue
+ // }
+ }
+ if(key == 'session_range_filter'){
+ console.log("\n\ntypeof of session_range_filter ", typeof(value))
+ for( const [key2, val] of Object.entries(value)){
+ console.log("inside session_range_filter value")
+ console.log(`${key2}: ${val}`)
+ if(val !== null){
+ newObject[key2] = val
+ }
+ continue
+ }
+ }
+ if(value !== null){
+ newObject[key] = value
+ }
+
+ console.log(`${key}: ${value}`);
+ }
+
+ for (const [key, value] of Object.entries(newObject)){
+ console.log('\n\nwithin new list\n\n')
+ console.log(`${key}: ${value}`)
+ }
+ console.log(typeof(filter));
this.isLoadingResults = true;
+
+ newObject["__page"] = this.paginator.pageIndex + 1;
+ newObject["__limit"] = this.paginator.pageSize;
+ newObject["__order"] = this.sort.active + ' ' + this.sort.direction
return this.exampleDatabase!.getRepoIssues(
- {"__page": this.paginator.pageIndex + 1})
+ newObject)
.pipe(catchError(() => observableOf(null)));
}),
map(data => {
@@ -355,6 +436,18 @@ export class SessionListComponent implements OnInit, OnDestroy {
return [];
}
+ // if (this.applyFilter()){
+ // const restrictedSessions = this.applyFilter();
+ // data.records = restrictedSessions;
+ // return data.records;
+ // }
+
+ // this.restrictedSessions = await this.applyFilter();
+ // this.createMenu(this.restrictedSessions);
+ // await this.updateTableView(this.restrictedSessions);
+
+
+
// Only refresh the result length if there is new data. In case of rate
// limit errors, we do not want to reset the paginator to zero, as that
// would prevent users from re-triggering requests.
@@ -365,6 +458,12 @@ export class SessionListComponent implements OnInit, OnDestroy {
})
).subscribe(data => this.data = data);
}
+
+ // async pagedTableData(){
+ // const restrictedSessions = await this.applyFilter();
+ // this.data.records = restrictedSessions;
+ // return data.records;
+ // }
ngOnDestroy() {
// Store paginator, sort, buttons, and sessions
@@ -400,9 +499,11 @@ export class SessionListComponent implements OnInit, OnDestroy {
this.hideNotReady4Delay = false;
const filters = {}
+ console.log(filters)
// Store the filters, regardless if it is empty
this.filterStoreService.storeSessionFilter(filters);
+ console.log(this.filterStoreService.retrieveSessionFilter)
// Add the default sorting for the api request
filters['__order'] = 'session_start_time DESC';
@@ -815,6 +916,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
updateTableView(restrictedSessions: Array) {
this.dataSource.paginator = this.paginator;
this.dataSource.sort = this.sort;
+ console.log(restrictedSessions)
this.dataSource.data = restrictedSessions;
}
@@ -837,13 +939,17 @@ export class SessionListComponent implements OnInit, OnDestroy {
else {
delete filter.session_range_filter
}
+ console.log(filter);
+ //this is object of filters being used
this.filterStoreService.storeSessionFilter(filter);
this.restrictedSessions = await this.applyFilter();
this.createMenu(this.restrictedSessions);
- await this.updateTableView(this.restrictedSessions);
+ //await this.updateTableView(this.restrictedSessions);
this.isLoading = false;
+ this.paginator.pageIndex = 0;
+ this.ngAfterViewInit();
}
/**
@@ -889,6 +995,8 @@ export class SessionListComponent implements OnInit, OnDestroy {
// Add the default sorting for the api request
requestFilter['__order'] = 'session_start_time DESC';
+ console.log(requestFilter)
+
// Query back end
tupleToRestrict = await this.allSessionsService.fetchSessions(requestFilter).toPromise();
}
@@ -909,6 +1017,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
restrictedSessions.push(tuple);
}
}
+ console.log(restrictedSessions)
return restrictedSessions;
}
@@ -921,7 +1030,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
await this.fetchSessions();
this.restrictedSessions = await this.applyFilter();
this.createMenu(this.restrictedSessions);
- await this.updateTableView(this.restrictedSessions);
+ //await this.updateTableView(this.restrictedSessions);
this.isLoading = false;
}
@@ -974,7 +1083,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
});
this.sort.active = '';
- await this.updateTableView(this.restrictedSessions);
+ //await this.updateTableView(this.restrictedSessions);
this.isLoading = false;
return;
}
From 77cad00ac4641a7ee7424a6e66a77b4e1c3e91b2 Mon Sep 17 00:00:00 2001
From: guzman-raphael
Date: Wed, 27 Oct 2021 17:26:22 -0500
Subject: [PATCH 09/36] Bump version for demo and reset build arg.
---
docker-compose-base.yml | 6 +++---
.../frontend-content/src/environments/environment.prod.ts | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/docker-compose-base.yml b/docker-compose-base.yml
index 7e8a7352..6c579b6c 100644
--- a/docker-compose-base.yml
+++ b/docker-compose-base.yml
@@ -9,7 +9,7 @@ services:
iblapi:
<<: *net
# image: registry.vathes.com/ibl-navigator/iblapi:v0.5.3 # for internal demo
- image: registry.vathes.com/ibl-navigator/iblapi:v0.2.1-public # for public demo
+ image: registry.vathes.com/ibl-navigator/iblapi:v0.3.0-public # for public demo
environment:
# for internal djcompute
# - DJ_USER=maho
@@ -33,7 +33,7 @@ services:
ibl-navigator:
<<: *net
# image: registry.vathes.com/ibl-navigator/frontend:v0.4.2 # for internal demo
- image: registry.vathes.com/ibl-navigator/frontend:v0.2.6-public # for public demo
+ image: registry.vathes.com/ibl-navigator/frontend:v0.3.0-public # for public demo
healthcheck:
test: curl --fail http://localhost:9000 || exit 1
timeout: 3s
@@ -42,7 +42,7 @@ services:
<<: *net
platform: linux/amd64
# image: registry.vathes.com/ibl-navigator/node-server:v0.3.0 # for internal demo
- image: registry.vathes.com/ibl-navigator/node-server:v0.2.1-public # for public demo
+ image: registry.vathes.com/ibl-navigator/node-server:v0.3.0-public # for public demo
environment:
- NODE_ENV=development
- DEMO_USERNAME=ibluser
diff --git a/ibl-frontend/frontend-content/src/environments/environment.prod.ts b/ibl-frontend/frontend-content/src/environments/environment.prod.ts
index 0f9c6cf1..e0dc2ff6 100644
--- a/ibl-frontend/frontend-content/src/environments/environment.prod.ts
+++ b/ibl-frontend/frontend-content/src/environments/environment.prod.ts
@@ -1,6 +1,6 @@
export const environment = {
production: true,
// api_url: '$PROD_NODE_API',
- backend_url: 'https://fakeservices.datajoint.io/api'
+ backend_url: '$PROD_NODE_BACKEND'
};
// before deploying, make sure backend_url part is backend_url: '(dollar)PROD_NODE_BACKEND'
\ No newline at end of file
From c73c043d953bfbca87b0df8221bd27c7c6e832c9 Mon Sep 17 00:00:00 2001
From: guzman-raphael
Date: Thu, 28 Oct 2021 10:54:58 -0500
Subject: [PATCH 10/36] Update PROD docker image, image tag, and address PROD
build issues for Angular.
---
docker-compose-base.yml | 2 +-
ibl-frontend/Dockerfile | 12 ++++++++----
ibl-frontend/frontend-content/angular.json | 4 +---
.../src/app/session-list/all-sessions.service.ts | 2 +-
.../frontend-content/src/environments/environment.ts | 4 ++--
5 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/docker-compose-base.yml b/docker-compose-base.yml
index 6c579b6c..6a9bdae0 100644
--- a/docker-compose-base.yml
+++ b/docker-compose-base.yml
@@ -33,7 +33,7 @@ services:
ibl-navigator:
<<: *net
# image: registry.vathes.com/ibl-navigator/frontend:v0.4.2 # for internal demo
- image: registry.vathes.com/ibl-navigator/frontend:v0.3.0-public # for public demo
+ image: registry.vathes.com/ibl-navigator/frontend:v0.3.1-public # for public demo
healthcheck:
test: curl --fail http://localhost:9000 || exit 1
timeout: 3s
diff --git a/ibl-frontend/Dockerfile b/ibl-frontend/Dockerfile
index 4543ce65..c6f32ad3 100644
--- a/ibl-frontend/Dockerfile
+++ b/ibl-frontend/Dockerfile
@@ -1,6 +1,10 @@
-FROM vathes/angulardev:angcli7.1.4-angbuild0.11.4
+# FROM vathes/angulardev:angcli7.1.4-angbuild0.11.4
+FROM node:12-bullseye
+RUN \
+ apt update && \
+ apt install nginx -y
WORKDIR /app/dist/pipeline-viewer
@@ -12,10 +16,10 @@ COPY ./app.conf /etc/nginx/conf.d/default.conf
CMD ["nginx", "-g", "daemon off;"]
ADD ./frontend-content/package.json /app/
-ADD ./frontend-content/package-lock.json /app/
+# ADD ./frontend-content/package-lock.json /app/
RUN \
cd /app && \
- npm install --save-dev @angular-devkit/build-angular > /dev/null
+ npm install # --save-dev @angular-devkit/build-angular > /dev/null
ADD ./frontend-content /app
@@ -25,7 +29,7 @@ COPY ./frontend-content/src/assets/addons/plotly.js /app/node_modules/plotly.js-
RUN \
cd /app && \
- node --max_old_space_size=8192 /usr/local/lib/node_modules/@angular/cli/bin/ng build --prod
+ node --max_old_space_size=8192 /app/node_modules/@angular/cli/bin/ng build --configuration production
# CMD ["http-server","-p", "8080" ,"-a","0.0.0.0"]
diff --git a/ibl-frontend/frontend-content/angular.json b/ibl-frontend/frontend-content/angular.json
index e558feb3..9521a3e7 100644
--- a/ibl-frontend/frontend-content/angular.json
+++ b/ibl-frontend/frontend-content/angular.json
@@ -31,8 +31,6 @@
"input": "src/assets/fonts/css/open-iconic-bootstrap.min.css",
"inject": true
},
- "node_modules/@angular/material/prebuilt-themes/indigo-pink-ibl.css",
- "src/assets/fonts/css/open-iconic-bootstrap.min.css",
"src/styles.css"
],
"scripts": [
@@ -64,7 +62,7 @@
{
"type": "initial",
"maximumWarning": "2mb",
- "maximumError": "7mb"
+ "maximumError": "10mb"
},
{
"type": "anyComponentStyle",
diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
index 0b2530fa..e5e0e7fe 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
@@ -39,7 +39,7 @@ export class AllSessionsService {
}
getRepoIssues(body: Object): Observable {
- const requestUrl = 'https://fakeservices.datajoint.io/api/sessions';
+ const requestUrl = BACKEND_API_URL + '/sessions';
return this.http.post(requestUrl, body, { responseType: 'json' });
diff --git a/ibl-frontend/frontend-content/src/environments/environment.ts b/ibl-frontend/frontend-content/src/environments/environment.ts
index 3ca14dfd..a310374b 100644
--- a/ibl-frontend/frontend-content/src/environments/environment.ts
+++ b/ibl-frontend/frontend-content/src/environments/environment.ts
@@ -5,13 +5,13 @@
export const environment = {
production: false,
// api_url: '$DEV_NODE_API',
- backend_url: 'https://fakeservices.datajoint.io/api'
+ backend_url: '$DEV_NODE_BACKEND'
};
// export const environment = {
// production: false,
// // api_url: '$DEV_NODE_API',
-// backend_url: 'https://fakeservices.datajoint.io/api'
+// backend_url: '$DEV_NODE_BACKEND'
// };
/*
From 3029727cbfa7fdb61ade93ff6849c1c9c66f3432 Mon Sep 17 00:00:00 2001
From: jverswijver
Date: Thu, 28 Oct 2021 16:19:03 -0500
Subject: [PATCH 11/36] Fix reset filter button.
---
.../session-list/session-list.component.ts | 66 ++++++++++---------
1 file changed, 35 insertions(+), 31 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
index 20f79d83..811fbd06 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
@@ -1031,6 +1031,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
this.restrictedSessions = await this.applyFilter();
this.createMenu(this.restrictedSessions);
//await this.updateTableView(this.restrictedSessions);
+ this.ngAfterViewInit();
this.isLoading = false;
}
@@ -1039,38 +1040,40 @@ export class SessionListComponent implements OnInit, OnDestroy {
*/
async handleResetFilterButtonPress() {
this.isLoading = true;
- for (const control in this.session_filter_form.controls) {
- const toReset = {}
+ // for (const control in this.session_filter_form.controls) {
+ // const toReset = {}
- if (control === 'session_range_filter') {
- toReset[control] = { 'session_range_start': null, 'session_range_end': null}
+ // if (control === 'session_range_filter') {
+ // toReset[control] = { 'session_range_start': null, 'session_range_end': null}
- } else if (control === 'sex') {
- toReset[control] = [false, false, false];
- for (const index in this.session_filter_form.get(control)['controls']) {
- this.session_filter_form.get(control).get([index]).enable();
- }
- } else {
- toReset[control] = null;
- }
- this.session_filter_form.patchValue(toReset);
- }
-
- this.route.queryParams.subscribe(async param => {
- if (Object.keys(param).length > 0) {
- // Clear all URL params, and do a fresh fetch
- this.router.navigate(
- [],
- {
- relativeTo: this.route,
- queryParams: null
- });
- }
- })
+ // } else if (control === 'sex') {
+ // toReset[control] = [false, false, false];
+ // for (const index in this.session_filter_form.get(control)['controls']) {
+ // this.session_filter_form.get(control).get([index]).enable();
+ // }
+ // } else {
+ // toReset[control] = null;
+ // }
+ // this.session_filter_form.patchValue(toReset);
+ // }
+
+ // this.route.queryParams.subscribe(async param => {
+ // if (Object.keys(param).length > 0) {
+ // // Clear all URL params, and do a fresh fetch
+ // this.router.navigate(
+ // [],
+ // {
+ // relativeTo: this.route,
+ // queryParams: null
+ // });
+ // }
+ // })
+
+ //all of the above code can just be done with this.session_filter_form.reset()
+ this.session_filter_form.reset()
// clear the filter in storage before applying filter
this.filterStoreService.clearSessionFilter();
-
this.restrictedSessions = await this.applyFilter();
this.createMenu(this.restrictedSessions);
@@ -1078,13 +1081,14 @@ export class SessionListComponent implements OnInit, OnDestroy {
this.paginator.pageIndex = 0;
this.paginator.pageSize = 25;
// the below is to remove the arrow UI that doesn't go away after this.sort.active = ''
- this.sort.sortables.forEach(sortItem => {
- this.sort.sort(sortItem);
- });
- this.sort.active = '';
+ // this.sort.sortables.forEach(sortItem => {
+ // this.sort.sort(sortItem);
+ // });
+ // this.sort.active = '';
//await this.updateTableView(this.restrictedSessions);
this.isLoading = false;
+ this.ngAfterViewInit();
return;
}
From 929c144fe0542dce70323d060b2b4424bfacc1e9 Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Fri, 29 Oct 2021 15:32:05 -0500
Subject: [PATCH 12/36] Adding ['records'] to show graphs
---
.../src/app/session-list/all-sessions.service.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
index e5e0e7fe..227496cc 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
@@ -97,7 +97,7 @@ export class AllSessionsService {
(filteredSessionsData) => {
let end = new Date();
// console.log(`It took ${Number(end) - Number(start)}ms to retrieve the session list information`)
- this.retrievedSessions = filteredSessionsData;
+ this.retrievedSessions = filteredSessionsData['records'];
// console.log('retrievedSessions data are: ');
// console.log(this.retrievedSessions);
this.newSessionsLoaded.next(this.retrievedSessions);
From 577179d08439f4919fe6f9da6e5e6be6dd7ecf3a Mon Sep 17 00:00:00 2001
From: jverswijver
Date: Fri, 29 Oct 2021 16:58:02 -0500
Subject: [PATCH 13/36] Disable filter dropdowns.
---
backend/iblapi.py | 2 +-
.../session-list/session-list.component.ts | 98 ++++++++++---------
2 files changed, 51 insertions(+), 49 deletions(-)
diff --git a/backend/iblapi.py b/backend/iblapi.py
index e447b50d..c7098c1c 100644
--- a/backend/iblapi.py
+++ b/backend/iblapi.py
@@ -177,7 +177,7 @@ def do_req(subpath):
page = int(request.values['__page']) if '__page' in values else 1
proj = json.loads(request.values['__proj']) if '__proj' in values else None
special_fields = ['__json', '__limit', '__order', '__proj', '__json_kwargs', '__page']
- for a in (v for v in values if v not in special_fields):
+ for a in (k for k, v in values.items() if k not in special_fields and v):
# HACK: 'uuid' attrs -> UUID type (see also: datajoint-python #594)
postargs[a] = UUID(values[a]) if 'uuid' in a else values[a]
args = [postargs] if len(postargs) else []
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
index 811fbd06..80a8208e 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
@@ -298,7 +298,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
else {
// Else fetch from database
console.log('in ngOnIt fetchSessions')
- await this.fetchSessions();
+ // await this.fetchSessions();
this.initialLoad = false;
}
@@ -545,56 +545,57 @@ export class SessionListComponent implements OnInit, OnDestroy {
keys.forEach(key => {
this.uniqueValuesForEachAttribute[key] = new Set();
})
-
- // Loop through each tuple
- restrictedSessions.forEach(tuple => {
- keys.forEach(key => {
- if (tuple[key] !== null && !this.uniqueValuesForEachAttribute[key].has(tuple[key])) {
- // Add it to the uniqueValuesForColumns if it doesn't already exist in there
- this.uniqueValuesForEachAttribute[key].add(tuple[key])
- }
- })
- });
+
+
+ // // Loop through each tuple
+ // restrictedSessions.forEach(tuple => {
+ // keys.forEach(key => {
+ // if (tuple[key] !== null && !this.uniqueValuesForEachAttribute[key].has(tuple[key])) {
+ // // Add it to the uniqueValuesForColumns if it doesn't already exist in there
+ // this.uniqueValuesForEachAttribute[key].add(tuple[key])
+ // }
+ // })
+ // });
- // Deal with specific case for
- this.patchSexMaterial(Sex.FEMALE, this.uniqueValuesForEachAttribute['sex'].has('F'));
- this.patchSexMaterial(Sex.MALE, this.uniqueValuesForEachAttribute['sex'].has('M'));
- this.patchSexMaterial(Sex.UNDEFINED, this.uniqueValuesForEachAttribute['sex'].has('U'));
-
- // This is for selected or not for sex, don't know why this is here blame Maho
- this.uniqueValuesForEachAttribute['sex'] = {
- F: false,
- M: false,
- U: false
- }
+ // // Deal with specific case for
+ // this.patchSexMaterial(Sex.FEMALE, this.uniqueValuesForEachAttribute['sex'].has('F'));
+ // this.patchSexMaterial(Sex.MALE, this.uniqueValuesForEachAttribute['sex'].has('M'));
+ // this.patchSexMaterial(Sex.UNDEFINED, this.uniqueValuesForEachAttribute['sex'].has('U'));
+
+ // // This is for selected or not for sex, don't know why this is here blame Maho
+ // this.uniqueValuesForEachAttribute['sex'] = {
+ // F: false,
+ // M: false,
+ // U: false
+ // }
- // Deal with figureing out the range of dates
- const sessionSeconds = [];
- this.uniqueValuesForEachAttribute['session_start_time'].forEach(date => {
- sessionSeconds.push(new Date(date).getTime());
- });
+ // // Deal with figureing out the range of dates
+ // const sessionSeconds = [];
+ // this.uniqueValuesForEachAttribute['session_start_time'].forEach(date => {
+ // sessionSeconds.push(new Date(date).getTime());
+ // });
- this.sessionMinDate = new Date(Math.min(...sessionSeconds));
- this.sessionMaxDate = new Date(Math.max(...sessionSeconds));
-
- // Figure out what dates are valid and assign it to this.sessionDateFilter for the material table to highlight those date
- this.sessionDateFilter = (date: Date): boolean => {
- let sessionDates = [];
- this.uniqueValuesForEachAttribute['session_start_time'].forEach(date => {
- sessionDates.push(date.toString().substring(0, 10)); // Split it at T and only take the first half
- });
- // filter out dates without any session
- return (date == null ? true : sessionDates.includes(date.toISOString().split('T')[0]))
- };
-
- // Figure out what dates for the mouse Birthday Filter are valid and assign it to this.sessionDateFilter for the material table to highlight those date
- this.miceBirthdayFilter = (calendarDate: Date): boolean => {
- let birthDates = [];
- this.uniqueValuesForEachAttribute['subject_birth_date'].forEach(date => {
- birthDates.push(date);
- });
- return (calendarDate == null ? true : birthDates.includes(calendarDate.toISOString().split('T')[0]))
- };
+ // this.sessionMinDate = new Date(Math.min(...sessionSeconds));
+ // this.sessionMaxDate = new Date(Math.max(...sessionSeconds));
+
+ // // Figure out what dates are valid and assign it to this.sessionDateFilter for the material table to highlight those date
+ // this.sessionDateFilter = (date: Date): boolean => {
+ // let sessionDates = [];
+ // this.uniqueValuesForEachAttribute['session_start_time'].forEach(date => {
+ // sessionDates.push(date.toString().substring(0, 10)); // Split it at T and only take the first half
+ // });
+ // // filter out dates without any session
+ // return (date == null ? true : sessionDates.includes(date.toISOString().split('T')[0]))
+ // };
+
+ // // Figure out what dates for the mouse Birthday Filter are valid and assign it to this.sessionDateFilter for the material table to highlight those date
+ // this.miceBirthdayFilter = (calendarDate: Date): boolean => {
+ // let birthDates = [];
+ // this.uniqueValuesForEachAttribute['subject_birth_date'].forEach(date => {
+ // birthDates.push(date);
+ // });
+ // return (calendarDate == null ? true : birthDates.includes(calendarDate.toISOString().split('T')[0]))
+ // };
// Set material from drop down
this.setDropDownFormOptions('filteredSessionLabOptions', this.session_filter_form.controls.session_lab, 'session_lab');
@@ -957,6 +958,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
* @returns
*/
async applyFilter(focusFieldKey?: string) {
+ return [];
if (!this.allSessions) {
return [];
}
From 76d7ded8ff0a18383864ca2883e9448337b4d0ac Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Fri, 29 Oct 2021 16:58:47 -0500
Subject: [PATCH 14/36] Removed unwanted fields from filter menu
---
.../session-list/session-list.component.html | 36 ++++++++++++-------
1 file changed, 23 insertions(+), 13 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
index 09fdae3a..03a86380 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
@@ -31,6 +31,15 @@
+
+
+
+
+
+
+
+
+
-
+
@@ -240,6 +249,7 @@
+
Lab |
{{session.session_lab}} |
From 657cb2dc248d407535b434c15c51ccb3b4febcaf Mon Sep 17 00:00:00 2001
From: jverswijver
Date: Fri, 29 Oct 2021 17:01:43 -0500
Subject: [PATCH 15/36] Comment out unused code.
---
.../session-list/session-list.component.ts | 106 +++++++++---------
1 file changed, 53 insertions(+), 53 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
index 80a8208e..9596feea 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
@@ -959,68 +959,68 @@ export class SessionListComponent implements OnInit, OnDestroy {
*/
async applyFilter(focusFieldKey?: string) {
return [];
- if (!this.allSessions) {
- return [];
- }
+ // if (!this.allSessions) {
+ // return [];
+ // }
- // Hide certain checkboxes
- this.hideMissingPlots = false;
- this.hideMissingEphys = false;
- this.hideNG4BrainMap = false;
- this.hideNotReady4Delay = false;
+ // // Hide certain checkboxes
+ // this.hideMissingPlots = false;
+ // this.hideMissingEphys = false;
+ // this.hideNG4BrainMap = false;
+ // this.hideNotReady4Delay = false;
- let tupleToRestrict = this.allSessions // By default this should be all sessions
-
- // Check if there is a brain region request, if so override the tupleToRestrict reference
- const brainRegionRequest = this.requested_BR;
- if (brainRegionRequest.length !== 0) {
- // BrainRegionRequest is not empty, thus query the backend for it
- let requestFilter = {}
- let BR_JSONstring = '';
- if (brainRegionRequest.length > 0) {
- BR_JSONstring = '';
- brainRegionRequest.filter(function(selection, index) {
- if (index > 0) {
- BR_JSONstring += `, "${selection}"`
- } else {
- BR_JSONstring += `"${selection}"`
- }
- })
- BR_JSONstring = '[' + BR_JSONstring + ']'
- }
+ // let tupleToRestrict = this.allSessions // By default this should be all sessions
+
+ // // Check if there is a brain region request, if so override the tupleToRestrict reference
+ // const brainRegionRequest = this.requested_BR;
+ // if (brainRegionRequest.length !== 0) {
+ // // BrainRegionRequest is not empty, thus query the backend for it
+ // let requestFilter = {}
+ // let BR_JSONstring = '';
+ // if (brainRegionRequest.length > 0) {
+ // BR_JSONstring = '';
+ // brainRegionRequest.filter(function(selection, index) {
+ // if (index > 0) {
+ // BR_JSONstring += `, "${selection}"`
+ // } else {
+ // BR_JSONstring += `"${selection}"`
+ // }
+ // })
+ // BR_JSONstring = '[' + BR_JSONstring + ']'
+ // }
- // Add it it to the requestFilter object
- if (brainRegionRequest.length > 0) {
- requestFilter['__json_kwargs'] = '{ "brain_regions": ' + BR_JSONstring + '}';
- }
+ // // Add it it to the requestFilter object
+ // if (brainRegionRequest.length > 0) {
+ // requestFilter['__json_kwargs'] = '{ "brain_regions": ' + BR_JSONstring + '}';
+ // }
- // Add the default sorting for the api request
- requestFilter['__order'] = 'session_start_time DESC';
+ // // Add the default sorting for the api request
+ // requestFilter['__order'] = 'session_start_time DESC';
- console.log(requestFilter)
+ // console.log(requestFilter)
- // Query back end
- tupleToRestrict = await this.allSessionsService.fetchSessions(requestFilter).toPromise();
- }
+ // // Query back end
+ // tupleToRestrict = await this.allSessionsService.fetchSessions(requestFilter).toPromise();
+ // }
- // Filter based on what the user requested
- let restrictionObjectFromForm = this.session_filter_form.getRawValue();
+ // // Filter based on what the user requested
+ // let restrictionObjectFromForm = this.session_filter_form.getRawValue();
- // if user is focusing on a specific field, then remove the currently focused field's restriction value from menu creation
- if (focusFieldKey) {
- restrictionObjectFromForm[focusFieldKey] = null;
- }
+ // // if user is focusing on a specific field, then remove the currently focused field's restriction value from menu creation
+ // if (focusFieldKey) {
+ // restrictionObjectFromForm[focusFieldKey] = null;
+ // }
- // Iterate through the tuples and restrict accordingly
- // This is kind of stupid cause it doesn't check if the restrictionObjectFromForm even have a valid restriction
- let restrictedSessions = [];
- for (let tuple of tupleToRestrict) {
- if (this.doesTupleMatchRestriction(tuple, restrictionObjectFromForm)) {
- restrictedSessions.push(tuple);
- }
- }
- console.log(restrictedSessions)
- return restrictedSessions;
+ // // Iterate through the tuples and restrict accordingly
+ // // This is kind of stupid cause it doesn't check if the restrictionObjectFromForm even have a valid restriction
+ // let restrictedSessions = [];
+ // for (let tuple of tupleToRestrict) {
+ // if (this.doesTupleMatchRestriction(tuple, restrictionObjectFromForm)) {
+ // restrictedSessions.push(tuple);
+ // }
+ // }
+ // console.log(restrictedSessions)
+ // return restrictedSessions;
}
/**
From 06008c47339c2eb06f0fe1f07598c54895b9b96d Mon Sep 17 00:00:00 2001
From: guzman-raphael
Date: Fri, 29 Oct 2021 18:27:19 -0500
Subject: [PATCH 16/36] Add spinner loading screen between paging.
---
.../frontend-content/src/app/app.module.ts | 3 ++-
.../app/session-list/session-list.component.css | 14 ++++++++++++++
.../app/session-list/session-list.component.html | 5 ++++-
.../src/app/session-list/session-list.component.ts | 4 ++++
4 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/app.module.ts b/ibl-frontend/frontend-content/src/app/app.module.ts
index ebb86bbd..65b146b0 100644
--- a/ibl-frontend/frontend-content/src/app/app.module.ts
+++ b/ibl-frontend/frontend-content/src/app/app.module.ts
@@ -64,6 +64,7 @@ import { PsthPlotsComponent } from './cell-list/cell/psth-plots/psth-plots.compo
import { QualityControlComponent } from './quality-control/quality-control.component';
import { DriftmapComponent } from './quality-control/driftmap/driftmap.component';
import { SpinningBrainComponent } from './mouse-list/mouse/spinning-brain/spinning-brain.component';
+import {MatProgressSpinnerModule} from '@angular/material/progress-spinner';
PlotlyModule.plotlyjs = PlotlyJS;
@@ -154,7 +155,7 @@ const appRoutes: Routes = [
FormsModule,
HttpClientModule,
RouterModule.forRoot(appRoutes),
- MatSelectModule, MatAutocompleteModule, MatIconModule, MatInputModule,
+ MatSelectModule, MatAutocompleteModule, MatIconModule, MatInputModule, MatProgressSpinnerModule,
MatCheckboxModule, MatRadioModule, MatNativeDateModule, MatDatepickerModule, MatMomentDateModule, MatSlideToggleModule,
MatCardModule, MatButtonModule, MatTableModule, MatPaginatorModule, MatSortModule, MatSliderModule, MatExpansionModule,
MatDialogModule, ReactiveFormsModule, FlexLayoutModule, MatTreeModule, MatFormFieldModule
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css
index ab1b6a20..ad9dfada 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css
@@ -101,6 +101,20 @@ label {
display: none;
}
+.example-loading-shade {
+ position: absolute;
+ /* top: 0; */
+ left: 0;
+ /* bottom: 56px; */
+ right: 0;
+ background: rgba(0, 0, 0, 0.15);
+ z-index: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 80%;
+}
+
.session-list-loading-message.show {
display: block;
}
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
index 03a86380..758c437d 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
@@ -247,8 +247,11 @@
+
+
+
-
Lab |
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
index 9596feea..7e38d1de 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
@@ -55,6 +55,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
responsible_user: new FormControl()
});
isLoading;
+ isLoadingTable = true;
initialLoad;
filterExpanded;
allSessions;
@@ -343,6 +344,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
}
ngAfterViewInit() {
+ this.isLoading = false;
this.exampleDatabase = new AllSessionsService(this._httpClient);
// If the user changes the sort order, reset back to the first page.
@@ -354,6 +356,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
.pipe(
startWith({}),
switchMap(() => {
+ this.isLoadingTable = true;
if(this.sort.direction == ''){
this.sort.active = 'session_start_time';
this.sort.direction = 'desc'
@@ -428,6 +431,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
.pipe(catchError(() => observableOf(null)));
}),
map(data => {
+ this.isLoadingTable = false;
// Flip flag to show that loading has finished.
this.isLoadingResults = false;
this.isRateLimitReached = data === null;
From eb928c5441c1a021d0d482f40eaeb205ff7f4add Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 11:30:42 -0500
Subject: [PATCH 17/36] Made changes to iblapi.py
---
backend/iblapi.py | 16 +---------------
1 file changed, 1 insertion(+), 15 deletions(-)
diff --git a/backend/iblapi.py b/backend/iblapi.py
index c7098c1c..4faedb92 100644
--- a/backend/iblapi.py
+++ b/backend/iblapi.py
@@ -168,7 +168,6 @@ def do_req(subpath):
pathparts = request.path.split('/')[2:] # ['', 'v0'] [ ... ]
obj = pathparts[0]
values = request.values
- print(f"\n\n\n\nValues: {values}\n\n\n\n")
postargs, jsonargs = {}, None
# construct kwargs
kwargs = {'as_dict': True}
@@ -197,7 +196,7 @@ def do_req(subpath):
('order_by', order,),
('offset', (page-1)*limit)) if v is not None}
# 2) and dispatch
- app.logger.info("args: '{}', kwargs: {}".format(args, kwargs))
+ app.logger.debug("args: '{}', kwargs: {}".format(args, kwargs))
if obj not in reqmap:
abort(404)
elif obj == '_q':
@@ -216,7 +215,6 @@ def do_req(subpath):
return dumps(fetched)
# return dumps(q.fetch(**kwargs))
-# def handle_q(subpath, args, proj, fetch_args=None, limit: int = 10, page: int = 1, **kwargs):
def handle_q(subpath, args, proj, fetch_args=None, **kwargs):
'''
special queries (under '/_q/ URL Space)
@@ -226,7 +224,6 @@ def handle_q(subpath, args, proj, fetch_args=None, **kwargs):
app.logger.info("\n\n\nthe value for limit is: {}\n\n\n".format(request.args))
app.logger.info("handle_q: subpath: '{}', args: {}".format(subpath, args))
- app.logger.info('key words: {}'.format(kwargs))
fetch_args = {} if fetch_args is None else fetch_args
ret = []
@@ -276,22 +273,11 @@ def handle_q(subpath, args, proj, fetch_args=None, **kwargs):
q = ((acquisition.Session() * sess_proj * psych_curve * ephys_data * subject.Subject() *
subject.SubjectLab() * subject.SubjectUser() * trainingStatus) & args & brain_restriction)
-
- # newLimit = int(request.args.get("limit", 10))
- # page = int(request.args.get("page", 1))
-
- app.logger.info('\n\n\n\n\nFetch Args: {}\n\n\n\n'.format(fetch_args))
q = q.proj(*proj) if proj else q
-
dj.conn().query("SET SESSION max_join_size={}".format('18446744073709551615'))
- # q = q.proj(*proj).fetch(limit=newLimit, offset=(page-1)*limit, **fetch_args) if proj else q.fetch(limit=newLimit, offset=(page-1)*limit, **fetch_args)
-
ret_count = len(q)
-
ret = q.fetch(**fetch_args)
-
dj.conn().query("SET SESSION max_join_size={}".format(original_max_join_size))
-
return dumps({"records_count": ret_count, "records": ret})
elif subpath == 'subjpage':
proj_restr = None
From 8833c056d9ba30dfd80e1022dc0ef7cdbda763d7 Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 11:31:53 -0500
Subject: [PATCH 18/36] iblapi.py changes
---
backend/iblapi.py | 3 ---
1 file changed, 3 deletions(-)
diff --git a/backend/iblapi.py b/backend/iblapi.py
index 4faedb92..2206646c 100644
--- a/backend/iblapi.py
+++ b/backend/iblapi.py
@@ -221,10 +221,7 @@ def handle_q(subpath, args, proj, fetch_args=None, **kwargs):
- for sessionpage, provide:
((session * subject * lab * user) & arg).proj(flist)
'''
-
- app.logger.info("\n\n\nthe value for limit is: {}\n\n\n".format(request.args))
app.logger.info("handle_q: subpath: '{}', args: {}".format(subpath, args))
-
fetch_args = {} if fetch_args is None else fetch_args
ret = []
post_process = None
From f96b75e9fad6c7e96a7f1873aa1e80be0e0784e3 Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 11:35:23 -0500
Subject: [PATCH 19/36] base docker yml changes
---
docker-compose-base.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/docker-compose-base.yml b/docker-compose-base.yml
index 6a9bdae0..46375723 100644
--- a/docker-compose-base.yml
+++ b/docker-compose-base.yml
@@ -9,7 +9,7 @@ services:
iblapi:
<<: *net
# image: registry.vathes.com/ibl-navigator/iblapi:v0.5.3 # for internal demo
- image: registry.vathes.com/ibl-navigator/iblapi:v0.3.0-public # for public demo
+ image: registry.vathes.com/ibl-navigator/iblapi:v0.3.1-public # for public demo
environment:
# for internal djcompute
# - DJ_USER=maho
@@ -33,7 +33,7 @@ services:
ibl-navigator:
<<: *net
# image: registry.vathes.com/ibl-navigator/frontend:v0.4.2 # for internal demo
- image: registry.vathes.com/ibl-navigator/frontend:v0.3.1-public # for public demo
+ image: registry.vathes.com/ibl-navigator/frontend:v0.3.2-public # for public demo
healthcheck:
test: curl --fail http://localhost:9000 || exit 1
timeout: 3s
@@ -42,7 +42,7 @@ services:
<<: *net
platform: linux/amd64
# image: registry.vathes.com/ibl-navigator/node-server:v0.3.0 # for internal demo
- image: registry.vathes.com/ibl-navigator/node-server:v0.3.0-public # for public demo
+ image: registry.vathes.com/ibl-navigator/node-server:v0.3.1-public # for public demo
environment:
- NODE_ENV=development
- DEMO_USERNAME=ibluser
From d559d9679442a17c4322ea387b9de5c331a67ca0 Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 11:38:12 -0500
Subject: [PATCH 20/36] changes to frontend/Dockerfile
---
ibl-frontend/Dockerfile | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/ibl-frontend/Dockerfile b/ibl-frontend/Dockerfile
index c6f32ad3..8bfdc8db 100644
--- a/ibl-frontend/Dockerfile
+++ b/ibl-frontend/Dockerfile
@@ -16,11 +16,10 @@ COPY ./app.conf /etc/nginx/conf.d/default.conf
CMD ["nginx", "-g", "daemon off;"]
ADD ./frontend-content/package.json /app/
-# ADD ./frontend-content/package-lock.json /app/
+
RUN \
cd /app && \
- npm install # --save-dev @angular-devkit/build-angular > /dev/null
-
+ npm install
ADD ./frontend-content /app
@@ -29,7 +28,7 @@ COPY ./frontend-content/src/assets/addons/plotly.js /app/node_modules/plotly.js-
RUN \
cd /app && \
- node --max_old_space_size=8192 /app/node_modules/@angular/cli/bin/ng build --configuration production
+ node --max_old_space_size=5120 /app/node_modules/@angular/cli/bin/ng build --configuration production
# CMD ["http-server","-p", "8080" ,"-a","0.0.0.0"]
From 575151f491061a7913ec40daf8a9bc483866f4b6 Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 11:41:00 -0500
Subject: [PATCH 21/36] changes to dev.dockerfile
---
ibl-frontend/dev.dockerfile | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/ibl-frontend/dev.dockerfile b/ibl-frontend/dev.dockerfile
index b0d6c80f..80073f2c 100644
--- a/ibl-frontend/dev.dockerfile
+++ b/ibl-frontend/dev.dockerfile
@@ -12,12 +12,10 @@ HEALTHCHECK \
COPY ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
-# CMD tail -f /dev/null
WORKDIR /app
ADD ./frontend-content/package.json /app/
-#ADD ./frontend-content/package-lock.json /app/
RUN \
npm install && \
npm install --only=dev
@@ -27,8 +25,8 @@ COPY ./frontend-content/src/assets/addons/indigo-pink-ibl.css /app/node_modules/
COPY ./frontend-content/src/assets/addons/plotly.js /app/node_modules/plotly.js-dist/
CMD ["node", "--max_old_space_size=5120", "/app/node_modules/@angular/cli/bin/ng", "serve", "--host", "0.0.0.0", "--port", "9000", "--disable-host-check"]
-# /app/node_modules/@angular/cli/bin/ng serve --host 0.0.0.0 --port 9000 --disable-host-check
-# /app/node_modules/@angular/cli/bin/ng serve --host 0.0.0.0 --port 9000 --disable-host-check 1> /app/src/output.log 2> /app/src/error.log
+
+# node --max_old_space_size=5120 /app/node_modules/@angular/cli/bin/ng serve --host 0.0.0.0 --port 9000 --disable-host-check 1> /app/src/output.log 2> /app/src/error.log
From 99cbe032139b4548bcb7222fea7697baeb36470e Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 11:56:33 -0500
Subject: [PATCH 22/36] interface referencing changes
---
.../app/session-list/GithubApiInterface.ts | 6 -----
.../app/session-list/GithubIssueInterface.ts | 20 --------------
.../app/session-list/all-sessions.service.ts | 27 ++++++++++++++++---
.../session-list/session-list.component.ts | 3 +--
4 files changed, 25 insertions(+), 31 deletions(-)
delete mode 100644 ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts
delete mode 100644 ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts
diff --git a/ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts b/ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts
deleted file mode 100644
index 7cbb7405..00000000
--- a/ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { GithubIssue } from "./GithubIssueInterface";
-
-export interface GithubApi {
- records: GithubIssue[];
- records_count: number;
- }
\ No newline at end of file
diff --git a/ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts b/ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts
deleted file mode 100644
index 83cf47f0..00000000
--- a/ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-export interface GithubIssue {
- mouse_id: number;
- session_date: string;
- session_lab: string;
- subject_nickname: string;
- subject_birth_date: string;
- session_start_time: string;
- task_protocol: string;
- subject_line: string;
- responsible_user: string;
- session_uuid: string;
- sex: string;
- subject_uuid: string;
- nplot: string;
- nprobe: string;
- session_project: string;
- good4bmap: string;
- }
-
-
\ No newline at end of file
diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
index 227496cc..143da4a1 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
@@ -1,14 +1,35 @@
import { Injectable } from '@angular/core';
import { Subject, Observable } from 'rxjs';
import { HttpClient } from '@angular/common/http';
-import { GithubApi } from './GithubApiInterface';
-import { GithubIssue } from './GithubIssueInterface';
-
import { environment } from '../../environments/environment';
const BACKEND_API_URL = environment.backend_url;
+export interface GithubIssue {
+ mouse_id: number;
+ session_date: string;
+ session_lab: string;
+ subject_nickname: string;
+ subject_birth_date: string;
+ session_start_time: string;
+ task_protocol: string;
+ subject_line: string;
+ responsible_user: string;
+ session_uuid: string;
+ sex: string;
+ subject_uuid: string;
+ nplot: string;
+ nprobe: string;
+ session_project: string;
+ good4bmap: string;
+}
+
+export interface GithubApi {
+ records: GithubIssue[];
+ records_count: number;
+}
+
@Injectable({
providedIn: 'root'
})
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
index 7e38d1de..001a940a 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
@@ -8,12 +8,11 @@ import { MatTreeNestedDataSource } from '@angular/material/tree';
import { MatPaginator} from '@angular/material/paginator';
import { MatTableDataSource } from '@angular/material/table';
import { MatSort } from '@angular/material/sort';
-import { AllSessionsService } from './all-sessions.service';
+import { AllSessionsService, GithubIssue } from './all-sessions.service';
import { FilterStoreService } from '../filter-store.service';
import * as moment from 'moment';
import * as _ from 'lodash';
import { NestedTreeControl } from '@angular/cdk/tree';
-import { GithubIssue } from './GithubIssueInterface';
enum Sex {
From b1d0302764a65c61b4eced82c7993aacce6d4ad1 Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 12:00:10 -0500
Subject: [PATCH 23/36] all-sessions-service changes
---
.../src/app/session-list/all-sessions.service.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
index 143da4a1..08c5d697 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
@@ -25,7 +25,7 @@ export interface GithubIssue {
good4bmap: string;
}
-export interface GithubApi {
+interface GithubApi {
records: GithubIssue[];
records_count: number;
}
From 5e57194ab26d5e94a379875bf7c8c6fcfa21c0be Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 13:50:16 -0500
Subject: [PATCH 24/36] Changing name from Sample Project
---
.../src/app/session-list/all-sessions.service.ts | 10 +++++-----
.../src/app/session-list/session-list.component.ts | 8 ++++----
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
index 08c5d697..1885b52e 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
@@ -6,7 +6,7 @@ import { environment } from '../../environments/environment';
const BACKEND_API_URL = environment.backend_url;
-export interface GithubIssue {
+export interface SessionRecord {
mouse_id: number;
session_date: string;
session_lab: string;
@@ -25,8 +25,8 @@ export interface GithubIssue {
good4bmap: string;
}
-interface GithubApi {
- records: GithubIssue[];
+interface SessionApi {
+ records: SessionRecord[];
records_count: number;
}
@@ -59,11 +59,11 @@ export class AllSessionsService {
return this.http.post(BACKEND_API_URL + '/sessions/', sessionFilters, { responseType: 'json'})
}
- getRepoIssues(body: Object): Observable {
+ getSessions(body: Object): Observable {
const requestUrl = BACKEND_API_URL + '/sessions';
- return this.http.post(requestUrl, body, { responseType: 'json' });
+ return this.http.post(requestUrl, body, { responseType: 'json' });
}
getAllSessions() {
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
index 001a940a..184b3485 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
@@ -8,7 +8,7 @@ import { MatTreeNestedDataSource } from '@angular/material/tree';
import { MatPaginator} from '@angular/material/paginator';
import { MatTableDataSource } from '@angular/material/table';
import { MatSort } from '@angular/material/sort';
-import { AllSessionsService, GithubIssue } from './all-sessions.service';
+import { AllSessionsService, SessionRecord } from './all-sessions.service';
import { FilterStoreService } from '../filter-store.service';
import * as moment from 'moment';
import * as _ from 'lodash';
@@ -115,7 +115,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
selectedSession = {};
exampleDatabase: AllSessionsService | null;
- data: GithubIssue[] = [];
+ data: SessionRecord[] = [];
resultsLength = 0;
isLoadingResults = true;
isRateLimitReached = false;
@@ -425,7 +425,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
newObject["__page"] = this.paginator.pageIndex + 1;
newObject["__limit"] = this.paginator.pageSize;
newObject["__order"] = this.sort.active + ' ' + this.sort.direction
- return this.exampleDatabase!.getRepoIssues(
+ return this.exampleDatabase!.getSessions(
newObject)
.pipe(catchError(() => observableOf(null)));
}),
@@ -455,7 +455,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
// limit errors, we do not want to reset the paginator to zero, as that
// would prevent users from re-triggering requests.
this.resultsLength = data.records_count;
- console.log("data githubIssue" + data.records)
+ console.log("data SessionRecord" + data.records)
console.log("length " + this.resultsLength)
return data.records;
})
From ad56b254d00a05f16478420addd4b96de69d140d Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 14:04:34 -0500
Subject: [PATCH 25/36] Commenting format in session-list html
---
.../app/session-list/all-sessions.service.ts | 2 --
.../session-list/session-list.component.html | 24 +++++++++----------
2 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
index 1885b52e..956391cf 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts
@@ -61,8 +61,6 @@ export class AllSessionsService {
getSessions(body: Object): Observable {
const requestUrl = BACKEND_API_URL + '/sessions';
-
-
return this.http.post(requestUrl, body, { responseType: 'json' });
}
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
index 758c437d..26ddd935 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
@@ -162,28 +162,28 @@
-
+
-
-
-
-
-
-
-
+
+
+
{{node.display}}
- // This is the tree node template for expandable nodes
+
From 05260735ae3eee6103828d8520d4e75de9a5e4cd Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 14:10:57 -0500
Subject: [PATCH 27/36] HTML formatting session-list
---
.../src/app/session-list/session-list.component.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
index e6529308..6ca60d0f 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
@@ -173,7 +173,7 @@
-
+
From 4717d22702eae905f0afdd8958780921a3a73e97 Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 14:15:28 -0500
Subject: [PATCH 28/36] HTML formatting session-list
---
.../src/app/session-list/session-list.component.html | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
index 6ca60d0f..a4a337d2 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
@@ -173,16 +173,16 @@
-
+ // This is the tree node template for leaf nodes
-
+ // use a disabled button to provide padding for tree leaf
{{node.display}}
-
+ // This is the tree node template for expandable nodes
From b56f087894591c4aa5ac4a028ed1bfbecb2ce9b6 Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 14:38:28 -0500
Subject: [PATCH 29/36] HTML changes and removing/change variables
---
.../session-list/session-list.component.html | 4 ++--
.../session-list/session-list.component.ts | 24 ++++++++-----------
2 files changed, 12 insertions(+), 16 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
index a4a337d2..2963e13d 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
@@ -251,7 +251,7 @@
*ngIf="isLoadingTable">
-
+
-
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
index 184b3485..c0ebe60e 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
@@ -114,11 +114,10 @@ export class SessionListComponent implements OnInit, OnDestroy {
selectedSession = {};
- exampleDatabase: AllSessionsService | null;
- data: SessionRecord[] = [];
- resultsLength = 0;
+ sessionService: AllSessionsService | null;
+ sessionRecords: SessionRecord[] = [];
+ sessionRecordLength = 0;
isLoadingResults = true;
- isRateLimitReached = false;
private sessionsSubscription: Subscription;
private sessionMenuSubscription: Subscription;
@@ -344,7 +343,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
ngAfterViewInit() {
this.isLoading = false;
- this.exampleDatabase = new AllSessionsService(this._httpClient);
+ this.sessionService = new AllSessionsService(this._httpClient);
// If the user changes the sort order, reset back to the first page.
this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);
@@ -425,17 +424,16 @@ export class SessionListComponent implements OnInit, OnDestroy {
newObject["__page"] = this.paginator.pageIndex + 1;
newObject["__limit"] = this.paginator.pageSize;
newObject["__order"] = this.sort.active + ' ' + this.sort.direction
- return this.exampleDatabase!.getSessions(
+ return this.sessionService!.getSessions(
newObject)
.pipe(catchError(() => observableOf(null)));
}),
- map(data => {
+ map(sessionRecords => {
this.isLoadingTable = false;
// Flip flag to show that loading has finished.
this.isLoadingResults = false;
- this.isRateLimitReached = data === null;
- if (data === null) {
+ if (sessionRecords === null) {
return [];
}
@@ -454,12 +452,10 @@ export class SessionListComponent implements OnInit, OnDestroy {
// Only refresh the result length if there is new data. In case of rate
// limit errors, we do not want to reset the paginator to zero, as that
// would prevent users from re-triggering requests.
- this.resultsLength = data.records_count;
- console.log("data SessionRecord" + data.records)
- console.log("length " + this.resultsLength)
- return data.records;
+ this.sessionRecordLength = sessionRecords.records_count;
+ return sessionRecords.records;
})
- ).subscribe(data => this.data = data);
+ ).subscribe(sessionRecords => this.sessionRecords = sessionRecords);
}
// async pagedTableData(){
From 37660d4c6a807c24154b24dcd998e633f582e36a Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 14:48:33 -0500
Subject: [PATCH 30/36] clean-up session-list
---
.../session-list/session-list.component.ts | 65 -------------------
1 file changed, 65 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
index c0ebe60e..aca29abf 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
@@ -178,7 +178,6 @@ export class SessionListComponent implements OnInit, OnDestroy {
if (key === '__json') {
// If key is __json than to reformat to IBL API format
const JSONcontent = JSON.parse(params[key]);
-
const dateRange = ['', '']; // First value is start date, second value is end date
// Loop through each item in JSON Content and figgure out it is a date or a gender
@@ -251,11 +250,6 @@ export class SessionListComponent implements OnInit, OnDestroy {
}
}
}
-
-
-
-
-
// Check storage to see if there is anything there
// Check for paginator
if (this.filterStoreService.sessionPaginator) {
@@ -291,12 +285,10 @@ export class SessionListComponent implements OnInit, OnDestroy {
// Check for preloaded sessions
if (this.filterStoreService.loadedSessions) {
// We have previously loaded sessions, thus just use that
- console.log(this.filterStoreService.loadedSessions);
this.allSessions = this.filterStoreService.loadedSessions;
}
else {
// Else fetch from database
- console.log('in ngOnIt fetchSessions')
// await this.fetchSessions();
this.initialLoad = false;
}
@@ -304,13 +296,10 @@ export class SessionListComponent implements OnInit, OnDestroy {
// Check if there are params, if they are then apply them via this.applyFilter();
if (params !== undefined && Object.keys(params).length !== 0) {
// There are params, thus apply the filter and get the restricted sessions
- console.log(params)
this.restrictedSessions = await this.applyFilter();
- console.log(this.restrictedSessions)
}
else {
// There are no params so just set restricted Session to all sessions
- console.log(this.restrictedSessions)
this.restrictedSessions = this.allSessions
}
@@ -326,8 +315,6 @@ export class SessionListComponent implements OnInit, OnDestroy {
this.dataSource.paginator = this.paginator
}
-
- console.log("update selection")
this.updateSelection();
});
@@ -344,12 +331,9 @@ export class SessionListComponent implements OnInit, OnDestroy {
ngAfterViewInit() {
this.isLoading = false;
this.sessionService = new AllSessionsService(this._httpClient);
-
// If the user changes the sort order, reset back to the first page.
this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);
-
let newObject = {};
-
merge(this.sort.sortChange, this.paginator.page)
.pipe(
startWith({}),
@@ -360,13 +344,10 @@ export class SessionListComponent implements OnInit, OnDestroy {
this.sort.direction = 'desc'
}
let filter = Object.assign({}, this.session_filter_form.getRawValue());
- console.log(`filter: ${JSON.stringify(filter)}`);
let newFilter = JSON.stringify(filter)
- console.log(Object.entries(filter))
for (const [key, value] of Object.entries(filter)) {
if(key == 'sex'){
- console.log("\n\ntypeof sex", typeof(value))
if(value[0] == true){
newObject[key] = 'F'
//female
@@ -385,22 +366,9 @@ export class SessionListComponent implements OnInit, OnDestroy {
else{
continue
}
-
- // for( const [key2, val] of Object.entries(value)){
- // console.log("inside sex value")
- // console.log(`${key2}: ${val}`)
- // if(val == 'true')
- // console.log(`\n\nSex Value: ${val}\n\n`)
- // console.log(`\n\nkey2`)
- // newObject[key2] = val
- // continue
- // }
}
if(key == 'session_range_filter'){
- console.log("\n\ntypeof of session_range_filter ", typeof(value))
for( const [key2, val] of Object.entries(value)){
- console.log("inside session_range_filter value")
- console.log(`${key2}: ${val}`)
if(val !== null){
newObject[key2] = val
}
@@ -410,15 +378,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
if(value !== null){
newObject[key] = value
}
-
- console.log(`${key}: ${value}`);
- }
-
- for (const [key, value] of Object.entries(newObject)){
- console.log('\n\nwithin new list\n\n')
- console.log(`${key}: ${value}`)
}
- console.log(typeof(filter));
this.isLoadingResults = true;
newObject["__page"] = this.paginator.pageIndex + 1;
@@ -436,19 +396,6 @@ export class SessionListComponent implements OnInit, OnDestroy {
if (sessionRecords === null) {
return [];
}
-
- // if (this.applyFilter()){
- // const restrictedSessions = this.applyFilter();
- // data.records = restrictedSessions;
- // return data.records;
- // }
-
- // this.restrictedSessions = await this.applyFilter();
- // this.createMenu(this.restrictedSessions);
- // await this.updateTableView(this.restrictedSessions);
-
-
-
// Only refresh the result length if there is new data. In case of rate
// limit errors, we do not want to reset the paginator to zero, as that
// would prevent users from re-triggering requests.
@@ -457,12 +404,6 @@ export class SessionListComponent implements OnInit, OnDestroy {
})
).subscribe(sessionRecords => this.sessionRecords = sessionRecords);
}
-
- // async pagedTableData(){
- // const restrictedSessions = await this.applyFilter();
- // this.data.records = restrictedSessions;
- // return data.records;
- // }
ngOnDestroy() {
// Store paginator, sort, buttons, and sessions
@@ -498,21 +439,15 @@ export class SessionListComponent implements OnInit, OnDestroy {
this.hideNotReady4Delay = false;
const filters = {}
- console.log(filters)
// Store the filters, regardless if it is empty
this.filterStoreService.storeSessionFilter(filters);
- console.log(this.filterStoreService.retrieveSessionFilter)
// Add the default sorting for the api request
filters['__order'] = 'session_start_time DESC';
- // filters['__page'] = this.pageIndex
- // filters['__limit'] = this.pageSize
this.allSessions = await this.allSessionsService.fetchSessions(filters).toPromise();
this.allSessions = this.allSessions['records'];
- console.log("\n\n\n\nSESSIONS: " + this.allSessions + " \n\n\n\n")
- //record count json and assign it here
}
setDropDownFormOptions(dropDownMenuOptionKey, formControl: AbstractControl, key: string) {
From 0a5af0d66bb981b457859a5fae9a3b170bc4152c Mon Sep 17 00:00:00 2001
From: jverswijver
Date: Mon, 1 Nov 2021 14:52:34 -0500
Subject: [PATCH 31/36] Fix css.
---
.../src/app/session-list/session-list.component.css | 5 +++--
.../src/app/session-list/session-list.component.html | 2 +-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css
index ad9dfada..209144a2 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css
@@ -108,11 +108,11 @@ label {
/* bottom: 56px; */
right: 0;
background: rgba(0, 0, 0, 0.15);
- z-index: 1;
+ z-index: 9;
display: flex;
align-items: center;
justify-content: center;
- height: 80%;
+ height: 100%;
}
.session-list-loading-message.show {
@@ -136,6 +136,7 @@ label {
.table-container {
width: 100%;
+ position: relative;
overflow-x: auto;
}
td.mat-cell,
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
index 758c437d..48cddb11 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
@@ -251,7 +251,7 @@
*ngIf="isLoadingTable">
-
+
Lab |
From ef0609f7bbf90830791953011e392621c1ac0c92 Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 14:53:08 -0500
Subject: [PATCH 32/36] removing excess code session-list
---
.../src/app/session-list/session-list.component.ts | 5 -----
1 file changed, 5 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
index aca29abf..bcfc244d 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts
@@ -851,7 +851,6 @@ export class SessionListComponent implements OnInit, OnDestroy {
updateTableView(restrictedSessions: Array) {
this.dataSource.paginator = this.paginator;
this.dataSource.sort = this.sort;
- console.log(restrictedSessions)
this.dataSource.data = restrictedSessions;
}
@@ -874,11 +873,7 @@ export class SessionListComponent implements OnInit, OnDestroy {
else {
delete filter.session_range_filter
}
- console.log(filter);
- //this is object of filters being used
this.filterStoreService.storeSessionFilter(filter);
-
-
this.restrictedSessions = await this.applyFilter();
this.createMenu(this.restrictedSessions);
//await this.updateTableView(this.restrictedSessions);
From 56842f7c1d39727536aff84f3052697910f18b5c Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 14:58:24 -0500
Subject: [PATCH 33/36] app.js removal of console.logs
---
node_server/app.js | 23 +----------------------
1 file changed, 1 insertion(+), 22 deletions(-)
diff --git a/node_server/app.js b/node_server/app.js
index 0eda4dcf..e0f22776 100644
--- a/node_server/app.js
+++ b/node_server/app.js
@@ -190,35 +190,14 @@ app.get('/sessions', checkAuth, (req, res) => {
})
app.post('/sessions', checkAuth, cacheMiddleware(15*60), (req, res) => {
- // console.log('posting to filter session page');
- console.log('\n\n\n\nreq.body: \n\n\n\n', req.body)
+ console.log('req.body: ', req.body)
console.log('type: ', typeof req.body)
- // console.log('\n\n\n\nlimit value\n\n\n', req.query)
- // console.log('\n\n\n\nlimit value\n\n\n', req.query.__limit[0])
- // console.log('\n\n\n\npage value\n\n\n', req.query.__page[0])
- // console.log('\n\n\n\norder value\n\n\n', req.query.__order)
- // console.log('\n\n\n\n\n\nparams\n\n\n\n\n\n\n', req.params)
- // res.append('__limit', req.query.__limit[0])
- // res.append('__page', req.query.__page[0])
- // res.append('__order', req.body)
- // res.set({
- // '__limit': req.query.__limit[0],
- // '__page': req.query.__page[0]
- // })
request.post(flask_backend + '/v0/_q/sessionpage', { form: req.body }, function (error, httpResponse, body) {
if (error) {
console.error('error [session list fetch]: ', error);
res.status(500).end();
return;
}
- // console.log(body);
- // res.append('__limit', req.query.__limit[0])
- // res.append('__page', req.query.__page[0])
- // res.append('__order', req.body)
- // res.set({
- // '__limit': req.query.__limit[0],
- // '__page': req.query.__page[0]
- // })
res.send(body);
})
})
From a3d5d19ab8c8e8438e00e67f27662d0e09f848ba Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 15:07:39 -0500
Subject: [PATCH 34/36] HTML changes to session-list html
---
.../src/app/session-list/session-list.component.html | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
index 2963e13d..961f8302 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
@@ -242,9 +242,7 @@
-
- Loading for the sessions may take a while depending on your internet connection. We appreciate your patience as we load the full list of sessions.
-
+
Date: Mon, 1 Nov 2021 15:32:42 -0500
Subject: [PATCH 35/36] changes to css class name and html link
---
.../src/app/session-list/session-list.component.css | 2 +-
.../src/app/session-list/session-list.component.html | 7 ++-----
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css
index 209144a2..c73569c4 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css
@@ -101,7 +101,7 @@ label {
display: none;
}
-.example-loading-shade {
+.session-list-loading-shade {
position: absolute;
/* top: 0; */
left: 0;
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
index 961f8302..7e8d1fba 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
@@ -38,7 +38,7 @@
-
+
-
-
-
-
Lab |
{{session.session_lab}} |
From 5f64a3c548fbefc285e096289c56f61f5cf6256c Mon Sep 17 00:00:00 2001
From: Carlos Ortiz
Date: Mon, 1 Nov 2021 15:36:18 -0500
Subject: [PATCH 36/36] html changes session-list
---
.../src/app/session-list/session-list.component.html | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
index 7e8d1fba..abda9626 100644
--- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
+++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html
@@ -38,7 +38,7 @@
-
+
+