Compare commits

...
472 Commits
Author SHA1 Message Date
esakempandGitHub fa7a370862 Merge pull request #1057 from UniversityOfHelsinkiCS/trunk
custom populations are here
2019-06-28 10:31:02 +03:00
esakemp 4b9a95f3d2 search tagged population 2019-06-28 09:24:42 +03:00
esakempandGitHub 34a3449249 Merge pull request #1056 from UniversityOfHelsinkiCS/trunk
Fix crash and css and js caching
2019-06-27 13:27:30 +03:00
Rochet2 6cc832d40c Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-06-27 12:51:08 +03:00
Rochet2 4bed9228d9 Fix invalidating css and js file caches 2019-06-27 12:50:59 +03:00
Mäkinen Sasu S 45b045865c rm clog 2019-06-27 10:53:17 +03:00
Mäkinen Sasu S 1da9d4b36d clicking 'label' in mandatory courses no longer crashes 2019-06-27 10:48:47 +03:00
Rochet2andGitHub aa0a5f23ef Merge pull request #1053 from UniversityOfHelsinkiCS/trunk
fixes and betterments
2019-06-26 17:36:41 +03:00
Rochet2 15517a7ff3 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-06-26 16:53:25 +03:00
Rochet2 4ef18d6946 Populate faculty programmes 2019-06-26 16:53:09 +03:00
esakemp 1ebd0aece5 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-26 15:20:45 +03:00
esakemp d801699bd1 fix tag dropdown 2019-06-26 15:20:31 +03:00
Mäkinen Sasu S 530c654dc1 fix 2 bugs with relative toggle 2019-06-26 15:13:26 +03:00
Mäkinen Sasu S 96b163dc43 delete 'all' from relative course graph 2019-06-26 14:50:02 +03:00
esakemp b086707afa Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-26 14:38:36 +03:00
esakemp ec5797c13f Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-26 14:03:26 +03:00
Mäkinen Sasu S 96c23fe337 fix collapse headers to deal with 'orderNumber' rather than 'key' 2019-06-26 14:00:43 +03:00
esakemp 047680f168 tag filter betterment 2019-06-26 13:57:19 +03:00
Sasu MäkinenandGitHub 9102a90262 Merge pull request #1047 from UniversityOfHelsinkiCS/trunk
minthify before meeting
2019-06-26 10:08:41 +03:00
Mäkinen Sasu S da32b25d78 relative view to course graphs 2019-06-26 09:49:06 +03:00
esakemp 3bf9125b2c visual change to tag creation 2019-06-26 08:27:34 +03:00
Mäkinen Sasu S fd80179799 course graph redesigning 2019-06-25 17:38:24 +03:00
esakempandGitHub 285e722ef9 Update AccessGroups.jsx 2019-06-25 15:54:04 +03:00
esakemp fbfe0ac0cd minthifying tags maybe 2019-06-25 13:56:11 +03:00
Rochet2 b88036036e Show doctoral programme in overview 2019-06-25 13:32:12 +03:00
Sasu MäkinenandGitHub dc0b02fe4a Merge pull request #1046 from UniversityOfHelsinkiCS/trunk
improved fixing
2019-06-25 12:13:38 +03:00
Mäkinen Sasu S 31df156381 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-25 11:39:56 +03:00
Mäkinen Sasu S 5309bdb621 made status updating durable 2019-06-25 11:39:51 +03:00
esakemp 538947c0cb small tag improvement 2019-06-25 08:46:43 +03:00
esakemp 8a7538b855 improve multiple tag addition 2019-06-25 08:22:49 +03:00
Mäkinen Sasu S 5ffde2d37c fix fsdkit test 2019-06-20 16:21:02 +03:00
Mäkinen Sasu S e627039176 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-20 16:13:06 +03:00
Mäkinen Sasu S c5d4caefcf #1014 2019-06-20 16:13:02 +03:00
esakempandGitHub 6ceca872e6 Merge pull request #1045 from UniversityOfHelsinkiCS/trunk
get rid of old staging
2019-06-20 15:08:58 +03:00
Tuomo Torppa 81259ef675 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-06-20 14:48:26 +03:00
Tuomo Torppa c987e6dbd8 saatana deprekoitu staging 2019-06-20 14:48:05 +03:00
Mäkinen Sasu S 2e2a06e627 cumulative course table selectable and cursor: pointer 2019-06-20 14:47:05 +03:00
Mäkinen Sasu S d10af5ce9f fix shit 2019-06-20 14:39:04 +03:00
Mäkinen Sasu S a3b6265568 teacher id deprecated, clickable with pointer 2019-06-20 14:31:54 +03:00
esakempandGitHub 0448d0b75c Merge pull request #1044 from UniversityOfHelsinkiCS/trunk
Course search form reunattu
2019-06-20 13:14:17 +03:00
Mäkinen Sasu S 1d3eb52e68 fix tests to fit new course statistics 2019-06-20 12:17:04 +03:00
Mäkinen Sasu S ad8b6ca0a1 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-20 12:02:01 +03:00
Mäkinen Sasu S 461ce9d431 Redesigned course search form 2019-06-20 12:01:57 +03:00
esakempandGitHub 122e518481 Merge pull request #1043 from UniversityOfHelsinkiCS/trunk
fix own shit
2019-06-20 10:23:28 +03:00
Tuomo Torppa 45b402d157 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-06-20 09:48:35 +03:00
Tuomo Torppa f6446a608a wrong port no-no 2019-06-20 09:48:23 +03:00
esakempandGitHub 2bb2f44d31 Merge branch 'master' into trunk 2019-06-20 09:34:37 +03:00
Tuomo Torppa 67940704bd staging server dockerfile 2019-06-20 09:22:54 +03:00
esakemp b537848311 fix broken grademeanfilter 2019-06-20 08:58:39 +03:00
esakemp c8d0b697b5 fix delete 2019-06-20 08:42:27 +03:00
esakempandGitHub a975292fa6 Merge pull request #1042 from UniversityOfHelsinkiCS/trunk
tagz up the wazooooo
2019-06-19 15:55:37 +03:00
esakemp 8b344e8c25 improve tag deletion 2019-06-19 15:37:10 +03:00
esakemp ba1f208225 oopsfixezz 2019-06-19 14:34:27 +03:00
Rochet2andGitHub 9bd39a37cf Merge pull request #1041 from UniversityOfHelsinkiCS/trunk
Faculty level access
2019-06-19 14:16:03 +03:00
esakemp 6700edf65f Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-19 13:57:13 +03:00
esakemp cd5a457abb Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-19 13:21:15 +03:00
Rochet2 0d8fe732e8 Fix tests 2019-06-19 13:11:39 +03:00
Rochet2 dffccec9f3 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-06-19 13:09:08 +03:00
Rochet2 84ec4d46de Add faculty level access rights. Define programmes for valtiotieteellinen tiedekunta 2019-06-19 13:09:02 +03:00
esakemp ff49e720dc roskis implementation of tagging entire population 2019-06-19 13:03:02 +03:00
Mäkinen Sasu S 9edcce3bf2 fixed new query button in course statistics 2019-06-19 12:58:30 +03:00
Sasu MäkinenandGitHub 947a0de0a6 Merge pull request #1039 from UniversityOfHelsinkiCS/trunk
use DB_URL insteadof shit
2019-06-18 18:16:29 +03:00
Mäkinen Sasu S d00182c150 use DB_URL insteadof shit 2019-06-18 18:01:16 +03:00
Sasu MäkinenandGitHub d30529ab72 Merge pull request #1037 from UniversityOfHelsinkiCS/trunk
TAG>Z BAND FUMPS
2019-06-18 17:09:38 +03:00
Mäkinen Sasu S 435f102599 dump only 'DB_SCHEMA' 2019-06-18 16:55:10 +03:00
Mäkinen Sasu S 6d3b46dfc3 env 2019-06-18 16:47:24 +03:00
Mäkinen Sasu S 4615f4a8e6 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-18 16:21:03 +03:00
Mäkinen Sasu S bfcd48dbb0 rm bullshit 2019-06-18 16:20:54 +03:00
Mäkinen Sasu S ee1ade9d8f recoding scheduler logic and writer to be able to create database dumps 2019-06-18 16:19:54 +03:00
esakemp 45c09874b1 fixz tagz againz 2019-06-18 15:14:06 +03:00
esakemp f6e09b8316 tagz fixingz 2019-06-18 14:22:04 +03:00
esakemp 45ec804c2e tag filterz 2019-06-18 11:30:40 +03:00
Sasu MäkinenandGitHub 349597cc29 Merge pull request #1034 from UniversityOfHelsinkiCS/trunk
shuffle student tasks to hopefully reduce deadlocks
2019-06-17 17:09:59 +03:00
Mäkinen Sasu S 977188a4e2 oopsfix 2019-06-17 16:38:57 +03:00
Mäkinen Sasu S c763ae8727 shuffle student tasks to hopefully reduce deadlocks 2019-06-17 16:37:10 +03:00
esakempandGitHub b14dfed31e Merge pull request #1033 from UniversityOfHelsinkiCS/trunk
schedule and force sync fixes
2019-06-17 13:52:10 +03:00
Mäkinen Sasu S 7dc93fc41f schedule and force sync fixes 2019-06-17 13:34:10 +03:00
esakempandGitHub 53e5fb4bc5 Merge pull request #1032 from UniversityOfHelsinkiCS/trunk
Production destruction incoming
2019-06-17 12:08:47 +03:00
Mäkinen Sasu S 68dc31ef21 volyyymitbäkkii 2019-06-17 11:41:34 +03:00
Mäkinen Sasu S 6dc63eea68 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-17 11:41:15 +03:00
Sasu MäkinenandGitHub 53e0afdd56 Merge pull request #1031 from UniversityOfHelsinkiCS/trunk
maybe betterify tags
2019-06-17 10:56:39 +03:00
esakempandGitHub a5f7986d97 Merge branch 'master' into trunk 2019-06-17 10:43:28 +03:00
Mäkinen Sasu S af3716f94b added migrations_kone to shared 2019-06-17 10:29:56 +03:00
esakemp 351b7d0567 minthify taggz 2019-06-17 09:56:11 +03:00
esakemp 88394cb2e1 tag backend betterify 2019-06-17 09:29:47 +03:00
esakempandGitHub 2813ed2eaa Merge pull request #1030 from UniversityOfHelsinkiCS/dependabot/npm_and_yarn/services/oodikone2-userservice/js-yaml-3.13.1
Bump js-yaml from 3.12.1 to 3.13.1 in /services/oodikone2-userservice
2019-06-14 15:48:24 +03:00
esakempandGitHub 029c2a4bb0 Merge branch 'master' into dependabot/npm_and_yarn/services/oodikone2-userservice/js-yaml-3.13.1 2019-06-14 15:35:03 +03:00
esakempandGitHub 1c5c5761c5 Merge pull request #1029 from UniversityOfHelsinkiCS/dependabot/npm_and_yarn/services/oodikone2-userservice/handlebars-4.1.2
Bump handlebars from 4.0.12 to 4.1.2 in /services/oodikone2-userservice
2019-06-14 15:30:42 +03:00
dependabot[bot]andGitHub a73e7369ff Bump js-yaml from 3.12.1 to 3.13.1 in /services/oodikone2-userservice
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.12.1 to 3.13.1.
- [Release notes](https://github.com/nodeca/js-yaml/releases)
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/3.12.1...3.13.1)

Signed-off-by: dependabot[bot] <support@github.com>
2019-06-14 12:16:29 +00:00
dependabot[bot]andGitHub ea4cf8651f Bump handlebars from 4.0.12 to 4.1.2 in /services/oodikone2-userservice
Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.0.12 to 4.1.2.
- [Release notes](https://github.com/wycats/handlebars.js/releases)
- [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md)
- [Commits](https://github.com/wycats/handlebars.js/compare/v4.0.12...v4.1.2)

Signed-off-by: dependabot[bot] <support@github.com>
2019-06-14 12:15:52 +00:00
esakemp b35ac28bf3 enable filters for tag list 2019-06-14 15:01:43 +03:00
esakemp fd124bdcad betterify tags 2019-06-14 14:27:37 +03:00
esakemp 68cca6f431 delete betterify 2019-06-14 13:58:07 +03:00
esakemp 24a5bdd777 betterify tags 2019-06-14 13:42:17 +03:00
esakemp 0364a34ee0 fix button name 2019-06-14 12:30:12 +03:00
esakempandGitHub 3a63c5317c Merge pull request #1024 from UniversityOfHelsinkiCS/trunk
duct tape implementation of tags
2019-06-14 12:08:11 +03:00
esakemp d63481b0d9 duct tape implementation of tags 2019-06-14 11:46:42 +03:00
Sasu MäkinenandGitHub c84fb51f7d Merge pull request #1023 from UniversityOfHelsinkiCS/trunk
curlit vittuun deploysta
2019-06-13 15:28:30 +03:00
Mäkinen Sasu S 1c4a81819b curlit vittuun deploysta 2019-06-13 15:10:03 +03:00
Sasu MäkinenandGitHub 2a0edc71e4 Merge pull request #1022 from UniversityOfHelsinkiCS/trunk
collapsing headers now deals with showing names
2019-06-13 14:44:04 +03:00
Mäkinen Sasu S 88c4c3a738 eslintfix 2019-06-13 14:26:42 +03:00
Mäkinen Sasu S a7f9e59703 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-13 14:12:01 +03:00
Mäkinen Sasu S f9042bf3b8 collapsing headers now deals with showing names 2019-06-13 14:11:17 +03:00
Sasu MäkinenandGitHub 5a26bd18c0 Merge pull request #1021 from UniversityOfHelsinkiCS/trunk
Lets fuck shit up
2019-06-13 12:09:39 +03:00
esakemp e12bccdd13 crucial change for models 2019-06-13 11:50:04 +03:00
esakemp dd22e385cc pls pass the tests 2019-06-13 11:35:18 +03:00
esakemp d32a863a05 tag stuff 2019-06-13 11:27:41 +03:00
esakemp 61c8886922 remove console.log 2019-06-13 08:41:38 +03:00
Sasu MäkinenandGitHub f274ee47bc Merge pull request #1020 from UniversityOfHelsinkiCS/trunk
fucking migrations, how do they work?
2019-06-12 16:09:49 +03:00
esakemp 78c8a505f0 pls god make this work now 2019-06-12 15:26:51 +03:00
esakempandGitHub 9261b00e8e Delete 20190611_01_add_column_to_tag_student.js 2019-06-12 13:23:47 +03:00
Sasu MäkinenandGitHub 2c27010ebf Merge pull request #1005 from UniversityOfHelsinkiCS/trunk
Panic
2019-06-12 12:06:46 +03:00
Mäkinen Sasu S 1ca1d85e9a acutally minthified collapsing mandatory courses 2019-06-12 10:20:42 +03:00
esakemp 2a19138c5c Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-12 09:57:12 +03:00
esakemp 1453f4ff76 model change 2019-06-12 09:54:40 +03:00
Mäkinen Sasu S ee432fdf5a Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-12 09:19:27 +03:00
Mäkinen Sasu S 155769e2e2 add visual cue for skipped cells in mandatory courses 2019-06-12 09:19:19 +03:00
esakemp 4ac09ac052 small change 2019-06-12 09:14:39 +03:00
esakemp abd0ebaee5 tag migrations maybe work now 2019-06-12 09:05:48 +03:00
Sasu MäkinenandGitHub 319fecb54e Merge pull request #1004 from UniversityOfHelsinkiCS/trunk
Collapsing header minthified
2019-06-11 18:09:11 +03:00
Mäkinen Sasu S dbd81caf9a sortableTable megapsykoosit vittu TULILLE 2019-06-11 17:30:37 +03:00
Mäkinen Sasu S a8bf3f7eb1 collapsing header doesnt ruin sorting anymore 2019-06-11 16:40:02 +03:00
Mäkinen Sasu S 0bc3099407 fix shit 2019-06-11 15:31:11 +03:00
Mäkinen Sasu S 82e39a2215 rm . 2019-06-11 15:29:28 +03:00
Sasu MäkinenandGitHub d66b66aa3a Merge pull request #1003 from UniversityOfHelsinkiCS/trunk
add force sync to writer
2019-06-11 15:02:26 +03:00
Mäkinen Sasu S 13886b62cd Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-11 14:48:55 +03:00
Mäkinen Sasu S 9ce0ce1529 add force sync to writer 2019-06-11 14:48:50 +03:00
esakempandGitHub d1b52ce005 Merge pull request #1002 from UniversityOfHelsinkiCS/trunk
how to do migrations 101
2019-06-11 13:13:10 +03:00
esakemp d90b19ba8f small minttu 2019-06-11 12:23:58 +03:00
esakemp 2fb735a149 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-11 12:09:52 +03:00
esakemp cac6ca9c50 fix tag migrations 2019-06-11 12:03:41 +03:00
Sasu MäkinenandGitHub f9b123aa1b Merge pull request #1001 from UniversityOfHelsinkiCS/trunk
tags and security
2019-06-11 10:40:48 +03:00
Mäkinen Sasu S bd1b453b22 collapsable sortable table 2019-06-11 10:22:06 +03:00
esakemp 8869de5e3c tag changes 2019-06-11 09:35:54 +03:00
esakempandGitHub 75e85874c7 Merge pull request #1000 from UniversityOfHelsinkiCS/dependabot/npm_and_yarn/services/oodikone2-frontend/trunk/axios-0.18.1
[Security] Bump axios from 0.18.0 to 0.18.1 in /services/oodikone2-frontend
2019-06-11 08:24:44 +03:00
esakemp 9b833b0dd5 stupid lint 2019-06-11 08:00:35 +03:00
dependabot-preview[bot]andGitHub 324afad820 [Security] Bump axios in /services/oodikone2-frontend
Bumps [axios](https://github.com/axios/axios) from 0.18.0 to 0.18.1. **This update includes security fixes.**
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.18.1/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.18.0...v0.18.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-11 03:37:06 +00:00
esakemp e9305392e5 another small change to tags 2019-06-10 15:38:25 +03:00
esakemp 34370af90a small changes 2019-06-10 15:29:05 +03:00
esakemp 7d2841b586 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-10 15:24:44 +03:00
esakemp e1cc9fa6d1 very non minttu tags 2019-06-10 15:18:24 +03:00
Sasu MäkinenandGitHub 24ba49b5be Merge pull request #998 from UniversityOfHelsinkiCS/dependabot/npm_and_yarn/services/oodikone2-userservice/trunk/tar-4.4.10
[Security] Bump tar from 4.4.1 to 4.4.10 in /services/oodikone2-userservice
2019-06-10 12:51:50 +03:00
Sasu MäkinenandGitHub f09b2441ff Merge pull request #999 from UniversityOfHelsinkiCS/dependabot/npm_and_yarn/services/backend/oodikone2-backend/trunk/axios-0.19.0
[Security] Bump axios from 0.18.0 to 0.19.0 in /services/backend/oodikone2-backend
2019-06-10 12:51:21 +03:00
dependabot-preview[bot]andGitHub 604503f778 [Security] Bump axios in /services/backend/oodikone2-backend
Bumps [axios](https://github.com/axios/axios) from 0.18.0 to 0.19.0. **This update includes security fixes.**
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.18.0...v0.19.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-10 09:35:05 +00:00
dependabot-preview[bot]andGitHub 766f6f1ff9 [Security] Bump tar in /services/oodikone2-userservice
Bumps [tar](https://github.com/npm/node-tar) from 4.4.1 to 4.4.10. **This update includes security fixes.**
- [Release notes](https://github.com/npm/node-tar/releases)
- [Commits](https://github.com/npm/node-tar/compare/v4.4.1...v4.4.10)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-10 09:23:39 +00:00
esakemp c190110e82 db changes to tag 2019-06-10 10:59:26 +03:00
esakemp 93b0d50aa4 small tag fix 2019-06-10 09:16:34 +03:00
Sasu MäkinenandGitHub 7f4d177ffc Merge pull request #997 from UniversityOfHelsinkiCS/trunk
delete tag ended studyrights
2019-06-07 15:40:22 +03:00
Mäkinen Sasu S fde131ab8e ended studyright instead of transferred from 2019-06-07 15:15:37 +03:00
esakemp 23e875f783 can delete tags from database 2019-06-07 14:52:20 +03:00
Sasu MäkinenandGitHub 9c93054e9a Merge pull request #994 from UniversityOfHelsinkiCS/trunk
tags, trasferredFrom and feature toggled shit away
2019-06-07 14:32:29 +03:00
esakemp 48259304b6 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-07 14:02:44 +03:00
esakemp 9edb2df3b5 can get data from student tag table 2019-06-07 14:02:31 +03:00
Mäkinen Sasu S 61b353682e feature toggled graduation median time and graduated in time 2019-06-07 13:57:46 +03:00
Mäkinen Sasu S 8f5f075309 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-07 13:08:03 +03:00
Mäkinen Sasu S 5492ed21ea added transferredFrom. These numbers all bullshit because the data is very bullshit 2019-06-07 12:44:43 +03:00
esakemp 4803b8f1fb tag posting 2019-06-07 12:30:16 +03:00
esakemp b8867fadba get tags from database to backend to frontend 2019-06-07 12:08:10 +03:00
Rochet2andGitHub b77a04ef33 Merge pull request #989 from UniversityOfHelsinkiCS/trunk
Reimplement labels
2019-06-07 10:53:16 +03:00
Rochet2 a9b2b1816d Reimplement labels 2019-06-06 19:03:24 +03:00
Rochet2andGitHub 04230a85b6 Merge pull request #988 from UniversityOfHelsinkiCS/trunk
add few years to course jump from students tatiscis
2019-06-06 16:04:45 +03:00
Mäkinen Sasu S 74da624b9e Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-06 15:49:12 +03:00
Mäkinen Sasu S 20b70f02c4 add few years to course jump from students tatiscis 2019-06-06 15:45:31 +03:00
Rochet2andGitHub 9acde13a84 Merge pull request #987 from UniversityOfHelsinkiCS/trunk
merge Trunk
2019-06-06 15:21:08 +03:00
esakemp c7e742f86c Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-06 14:57:51 +03:00
esakemp 8be1f6a1c4 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-06 14:48:25 +03:00
Mäkinen Sasu S 0e9d63d982 fix table header in student statistics and made a test for course jump 2019-06-06 14:46:04 +03:00
esakemp 9202c7d765 tag migrations 2019-06-06 14:24:14 +03:00
Mäkinen Sasu S af528092e9 fix hardcoded test string to actual variable 2019-06-06 14:24:01 +03:00
Rochet2 2b998a9270 Fix travis db setup 2019-06-06 13:15:51 +03:00
Rochet2 0abcfe54af Fix folder name copy paste 2019-06-06 11:33:25 +03:00
Rochet2 1a3cd1f234 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-06-06 11:13:49 +03:00
Rochet2 66ca9518cf Fix KONE migration parameters 2019-06-05 20:48:34 +03:00
Rochet2 7071c43a45 Import databases with no owner - we dont want random owners 2019-06-05 20:47:47 +03:00
esakemp 8fa1293462 remove console.log 2019-06-05 15:24:50 +03:00
esakemp 3a8ad9eab0 betterify column name 2019-06-05 14:53:21 +03:00
esakempandGitHub fb3c8bb074 Merge pull request #982 from UniversityOfHelsinkiCS/trunk
columns in table, feedback maybe minthified
2019-06-05 14:03:58 +03:00
esakemp 6cad4bc191 feedback improvements 2019-06-05 12:58:12 +03:00
esakemp d128b1abe4 hyväksiluettu in table 2019-06-05 12:21:52 +03:00
esakemp 2385d85d45 overview updates 2019-06-05 10:37:11 +03:00
Sasu MäkinenandGitHub e5938d59cf Merge pull request #979 from UniversityOfHelsinkiCS/trunk
course statistics url
2019-06-04 17:52:20 +03:00
Sasu MäkinenandGitHub e49f986282 Merge branch 'master' into trunk 2019-06-04 17:18:05 +03:00
Mäkinen Sasu S 2509701a95 trailing spaces rm 2019-06-04 17:12:56 +03:00
Mäkinen Sasu S e290695902 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-04 17:07:20 +03:00
Mäkinen Sasu S 49a0302974 initial cours ejump from student. Needs more work 2019-06-04 17:07:15 +03:00
Rochet2andGitHub e5d8a82670 Disable cypress dashboard 2019-06-04 16:33:06 +03:00
Rochet2 768c242427 Fix Model.Update not working with prependSearchPath: true 2019-06-04 16:16:30 +03:00
Rochet2 d2b7180184 Fix hiding label column row when no actual labels 2019-06-04 16:16:29 +03:00
Rochet2 5421d80925 Change overview default order direction 2019-06-04 16:16:28 +03:00
Mäkinen Sasu S 1bfecb7311 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-04 16:06:15 +03:00
Mäkinen Sasu S 975c5ffe6c course statistics now searches based on url, works as well (poorly) as population search so we will fix it later (tm) 2019-06-04 16:06:11 +03:00
Sasu MäkinenandGitHub 3b165258c8 Merge pull request #978 from UniversityOfHelsinkiCS/trunk
studyprogrammeeee
2019-06-04 15:55:00 +03:00
esakemp b5a1953ce2 show new numbers in overview 2019-06-04 15:36:32 +03:00
esakempandGitHub d6558a93e9 whoopsie 2019-06-04 15:13:05 +03:00
esakemp 693d677349 mergele, percentage 2019-06-04 15:08:14 +03:00
Mäkinen Sasu S 079c4f787d Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-04 14:32:01 +03:00
Mäkinen Sasu S 08f6bd6bfd change median graduation time from productivity to population throughput 2019-06-04 14:31:58 +03:00
Rochet2andGitHub f17ce53e4b Merge pull request #976 from UniversityOfHelsinkiCS/trunk
Release afterparty
2019-06-04 14:17:58 +03:00
Rochet2 9c2a270475 Require key in sortabletable props 2019-06-04 13:53:02 +03:00
Rochet2 c310ccc5c4 Fix student search sometimes not finding anything 2019-06-04 12:27:17 +03:00
Rochet2 4491bd5225 Fix sorting, make sure prop types prevent sort errors in future 2019-06-04 12:16:37 +03:00
Rochet2 1ca6031201 change >= to ≥ 2019-06-04 12:16:36 +03:00
Sasu MäkinenandGitHub 3dc67b7a28 Merge pull request #969 from UniversityOfHelsinkiCS/trunk
Make feedback visible to users
2019-06-04 12:06:24 +03:00
esakemp 1de6b809f2 betterifying own non smartness 2019-06-04 08:31:45 +03:00
Rochet2andGitHub 8b93eaa574 Merge pull request #968 from UniversityOfHelsinkiCS/trunk
Fix everything
2019-06-03 22:36:47 +03:00
Rochet2 35e82b80f0 Check that nothing has nonzero exit code in travis 2019-06-03 21:10:03 +03:00
Rochet2 5c867fea77 Save last query and only accept responses related to last query 2019-06-03 20:02:43 +03:00
Rochet2 b82c1dc597 superlogin now sends token for access control 2019-06-03 19:11:39 +03:00
Rochet2 a40405f8a2 Fix mockedby impersonation 2019-06-03 18:30:04 +03:00
Rochet2 f497dc5da0 Re enable cypress failure recording again 2019-06-03 18:23:30 +03:00
Rochet2 5ee619ae99 Fix test clicking button before refresh 2019-06-03 17:28:45 +03:00
Rochet2 e30dde6c5d Fix release slack message 2019-06-03 17:25:12 +03:00
Rochet2 5f3260ddfd Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-06-03 16:51:47 +03:00
Rochet2 668a4daf51 overwrite existing files when unzipping 2019-06-03 16:44:51 +03:00
Sasu MäkinenandGitHub d4cad41287 Merge pull request #966 from UniversityOfHelsinkiCS/trunk
Add sorting to overview and students listing/search
2019-06-03 16:28:24 +03:00
Mäkinen Sasu S deaa46adf5 fixify tests 2019-06-03 16:06:59 +03:00
Rochet2 eeb4493162 Add tests for superlogin/mocking 2019-06-03 15:50:37 +03:00
Mäkinen Sasu S c421d1f2db Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-03 15:29:05 +03:00
Mäkinen Sasu S af02515d4c median graduation time 2019-06-03 15:29:01 +03:00
Rochet2 96df3b559e Fix superlogin 2019-06-03 15:11:18 +03:00
Tuomo Torppa f6316e73eb Yearly update teacher leaderboard stats button 2019-06-03 14:37:51 +03:00
Rochet2 dacc8e9b22 err is not convertible to json (circular) 2019-06-03 14:37:42 +03:00
Rochet2 ac29023575 Fix crash when superlogin used with invalid userid 2019-06-03 14:33:41 +03:00
Rochet2 b9ce30ac65 Fix requests stuck in pending state 2019-06-03 14:33:17 +03:00
Rochet2 6449be07d8 Must use -T to be able to run through git hooks
This reverts commit b67dfa5293.
2019-06-03 13:42:19 +03:00
Rochet2 53d14c76c4 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-06-03 13:41:40 +03:00
Rochet2 b67dfa5293 Dont use pseudo tty, this allows us to see colors erc 2019-06-03 13:41:28 +03:00
Rochet2 4e441d4b29 Fix force sync 2019-06-03 13:40:10 +03:00
Sasu MäkinenandGitHub 2e3866fca7 Merge pull request #965 from UniversityOfHelsinkiCS/trunk
Feedback form fixes, transferred credist to teacher page, logging
2019-06-03 13:30:36 +03:00
Mäkinen Sasu S fa26194bd5 timetograduation 2019-06-03 12:52:59 +03:00
Rochet2 3e97f5f939 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-06-03 12:30:46 +03:00
Rochet2 0f6943c0dd Allow sorting of student search results 2019-06-03 12:30:27 +03:00
Rochet2 7826b40344 Implement sorting to overview programme listing 2019-06-03 12:18:38 +03:00
Mäkinen Sasu S 9bdc186c7f Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-03 10:50:55 +03:00
Mäkinen Sasu S 5172499794 update axios to 0.19.0 to fix security issue 2019-06-03 10:38:46 +03:00
totutotu 05da8366c2 ignore hyväksiluku credits 2019-06-03 10:35:09 +03:00
Mäkinen Sasu S d14f7dfc70 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-06-03 10:30:10 +03:00
Rochet2 5bbfc26f76 Seed all migrations instead of just some 2019-06-03 10:23:40 +03:00
Mäkinen Sasu S ed14c0f81e fixing logging 2019-06-03 10:22:27 +03:00
totutotu ba6e554987 Transferred credits to teacher page 2019-06-03 10:02:41 +03:00
esakemp 118e6079d8 improve feedback 2019-06-03 08:56:11 +03:00
Rochet2andGitHub 46c82cb12c Merge pull request #959 from UniversityOfHelsinkiCS/trunk
graduation target time now depends if bachelors or masters
2019-05-31 13:19:12 +03:00
esakemp 6091dfc74a Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-31 13:17:07 +03:00
esakemp 5cba1e32c0 small frontend fixes 2019-05-31 13:16:40 +03:00
Mäkinen Sasu S 1cb3703ca6 graduation target time now depends if bachelors or masters 2019-05-31 12:07:57 +03:00
Sasu MäkinenandGitHub 7a7dc949ca Merge pull request #958 from UniversityOfHelsinkiCS/trunk
acual featuretoggel
2019-05-31 12:00:30 +03:00
Mäkinen Sasu S 041dd8e86c Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-31 11:42:47 +03:00
Mäkinen Sasu S 6f34c68d06 actually USE the featuretoggle for countries in overview 2019-05-31 11:42:39 +03:00
Sasu MäkinenandGitHub ac6188310c Merge pull request #956 from UniversityOfHelsinkiCS/trunk
disable countries for now
2019-05-31 11:39:16 +03:00
esakemp 2b2ea8bfa8 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-31 10:36:59 +03:00
esakemp 6de465612f fix small bug in overview 2019-05-31 10:35:53 +03:00
Mäkinen Sasu S 42ae116684 disable countries for now 2019-05-31 10:31:44 +03:00
Sasu MäkinenandGitHub 759ca39edc Merge pull request #951 from UniversityOfHelsinkiCS/trunk
table shuffling
2019-05-29 16:45:23 +03:00
Mäkinen Sasu S 6b4370fce7 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-29 16:23:00 +03:00
Mäkinen Sasu S 7fe52c986e realigned graduated stats to maybe fit 2019-05-29 16:22:48 +03:00
Sasu MäkinenandGitHub 97dd80e543 Merge pull request #950 from UniversityOfHelsinkiCS/trunk
5 commits! studentlist, countries , graduated in time
2019-05-29 15:44:27 +03:00
esakemp 1630a3e2ec Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-29 15:25:22 +03:00
esakemp 8157dcc08b even faster push before pr 2019-05-29 15:22:27 +03:00
Rochet2 4a3d4223db Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-29 15:18:10 +03:00
Rochet2 d2be968bd8 Use new DB backups and implement reset DB commands 2019-05-29 15:17:50 +03:00
esakemp cbd9383fe8 fast push before pr 2019-05-29 15:09:46 +03:00
Sasu MäkinenandGitHub 044dedf0aa Merge branch 'master' into trunk 2019-05-29 15:07:22 +03:00
Mäkinen Sasu S 1778b907a2 MERGEYST 2019-05-29 14:39:37 +03:00
Mäkinen Sasu S d97f4493c4 graduated in time to frontend 2019-05-29 14:39:19 +03:00
totutotu 458271bcda Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-29 13:33:21 +03:00
totutotu 3b3e2fd78a countries to overview 2019-05-29 13:26:53 +03:00
esakemp 8a764940e5 studentlist search works 2019-05-29 12:19:54 +03:00
Rochet2 ec2f7ad29e Remove oodilearn mongo_db from travis 2019-05-29 10:50:50 +03:00
Sasu MäkinenandGitHub 101a226890 Merge pull request #947 from UniversityOfHelsinkiCS/trunk
Split custom data from read only data and minor shit
2019-05-29 10:47:31 +03:00
esakemp 0848c3c00c Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-29 10:27:14 +03:00
esakemp 595a9f25fa improve studentnumber check 2019-05-29 10:23:11 +03:00
Mäkinen Sasu S c89d94823d remove object nesting to graylog 2019-05-29 09:42:04 +03:00
Mäkinen Sasu S 5e9636b081 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-29 09:20:48 +03:00
Mäkinen Sasu S 4db3cc7660 fix inTargetTime not returned for each year 2019-05-29 09:15:13 +03:00
esakemp 982b5a7fc0 not so minthified studentnumber list search 2019-05-29 09:10:19 +03:00
Rochet2 c00e795e80 Split custom data from read only data 2019-05-28 17:46:59 +03:00
Rochet2 80eecc3099 sometimes retry limit is reached in travis, increase retry in case docker needs more time to start up 2019-05-28 17:46:57 +03:00
Sasu MäkinenandGitHub b4be5921f3 Merge pull request #946 from UniversityOfHelsinkiCS/trunk
calculate students in target time for overview
2019-05-28 17:16:23 +03:00
Mäkinen Sasu S 6b1e32feab remove magic numbers and console log as requested by Mr Rochet 2019-05-28 16:55:21 +03:00
Mäkinen Sasu S e43fe743f7 fix findGraduation format test 2019-05-28 16:47:57 +03:00
Mäkinen Sasu S 873d8fe41c calculate students in target time for overview 2019-05-28 16:24:58 +03:00
Mäkinen Sasu S d1f8de351b fix cron timing 2019-05-28 14:33:38 +03:00
Sasu MäkinenandGitHub 77aeedfd74 Merge pull request #945 from UniversityOfHelsinkiCS/trunk
change graylog data
2019-05-28 13:49:47 +03:00
Mäkinen Sasu S 2c941337e1 change graylog data 2019-05-28 13:34:04 +03:00
Sasu MäkinenandGitHub 4809965592 Merge pull request #944 from UniversityOfHelsinkiCS/trunk
rally fixes and bettermetn
2019-05-28 12:17:58 +03:00
Mäkinen Sasu S 28069b2a9f Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-28 12:05:20 +03:00
Mäkinen Sasu S a499c7973b statistics from updater 2019-05-28 12:04:58 +03:00
esakemp ec1ed37284 deprecate some lines 2019-05-28 10:45:21 +03:00
Mäkinen Sasu S 6bc726d53a exit instead of kill 2019-05-28 09:59:57 +03:00
esakemp 7922d651a9 small betterment 2019-05-28 08:39:02 +03:00
Mäkinen Sasu S e1a718948c logging changes 2019-05-27 15:14:54 +03:00
esakempandGitHub 2c5b6b43ce fix rally english 2019-05-27 15:13:37 +03:00
esakemp 2f5c0fc146 studytrack betterment 2019-05-27 14:43:52 +03:00
Rochet2andGitHub 34b06996d0 Merge pull request #943 from UniversityOfHelsinkiCS/trunk
fix first time render of labels, disable save when label not changed
2019-05-27 14:39:22 +03:00
Rochet2 4b3e907912 fix first time render of labels, disable save when label not changed 2019-05-27 13:48:36 +03:00
Mäkinen Sasu S eded618adf fix known issue of 'oodikone-cli ei toimi' 2019-05-27 12:32:34 +03:00
esakemp f68fb5ff85 add user email to feedback 2019-05-27 09:01:18 +03:00
totutotu 18bfed4773 transferred students to throughput table 2019-05-24 14:50:01 +03:00
totutotu 1fa756ac98 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-24 13:47:24 +03:00
totutotu d160a368bb Throughput to include transferred students 2019-05-24 13:47:07 +03:00
Rochet2 3ed3bf3598 remove redundant stuff 2019-05-24 13:31:55 +03:00
Rochet2andGitHub 69096092de Merge pull request #935 from UniversityOfHelsinkiCS/trunk
Fix student graph
2019-05-24 12:35:58 +03:00
Rochet2 9604fdfd41 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-24 12:13:02 +03:00
Rochet2 b8cb6f7e9e add nats dependency 2019-05-24 12:12:32 +03:00
Rochet2 5e93756fee Fix student graph being 2019-05-24 12:08:23 +03:00
Mäkinen Sasu S bcd20539c1 modify logging 2019-05-24 12:00:50 +03:00
Sasu MäkinenandGitHub 8325acb54b Merge pull request #934 from UniversityOfHelsinkiCS/trunk
winston to api
2019-05-24 10:36:13 +03:00
Mäkinen Sasu S 362166e558 winston to api 2019-05-24 10:19:41 +03:00
Sasu MäkinenandGitHub b4b8344482 Merge pull request #927 from UniversityOfHelsinkiCS/trunk
better error handling at writer
2019-05-24 09:55:35 +03:00
Rochet2 ce22aa9407 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-24 09:40:47 +03:00
Rochet2 e869f4b144 Fix tests matching too many elements 2019-05-24 09:40:31 +03:00
Mäkinen Sasu S 4fc0628e1d log every api call from updater_api 2019-05-24 09:32:33 +03:00
Rochet2 f8c56ab792 lintfix 2019-05-24 09:31:19 +03:00
Rochet2 bca8bf99c3 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-24 09:27:27 +03:00
Rochet2 8877d0bc30 Fix transferred studyright 2019-05-24 09:27:04 +03:00
Mäkinen Sasu S 41a2bb0e77 better error handling at writer 2019-05-24 09:20:46 +03:00
Rochet2 59e46026e1 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-24 09:19:35 +03:00
Rochet2 3e4254369f Implement labels to mandatory courses 2019-05-24 09:19:28 +03:00
Rochet2 d30b15d11c Remove restart policies from travis, log container state in travis at the end 2019-05-24 09:18:28 +03:00
Sasu MäkinenandGitHub ce535916a9 Merge pull request #926 from UniversityOfHelsinkiCS/trunk
Klaskified PR
2019-05-23 17:02:19 +03:00
Mäkinen Sasu S 63d07ccd74 rm clog 2019-05-23 16:27:39 +03:00
Mäkinen Sasu S 1a265a149e Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-23 16:26:40 +03:00
Mäkinen Sasu S cf9c7ce0f3 deadlock detection try 2019-05-23 16:26:32 +03:00
totutotu 8b3f9bde92 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-23 15:55:21 +03:00
totutotu f9223621e7 set total values to througput db and frontend 2019-05-23 15:55:11 +03:00
esakemp 1bef820f9f Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-23 15:06:46 +03:00
esakemp 2a969703e4 feedback functionality 2019-05-23 14:58:20 +03:00
Sasu MäkinenandGitHub d4dc2ce492 Merge pull request #925 from UniversityOfHelsinkiCS/trunk
add ramp up time for scheduling students to give doo api some time to…
2019-05-23 14:40:09 +03:00
Mäkinen Sasu S a6aa1c7d5a bugfix and greylog logging 2019-05-23 14:24:27 +03:00
Mäkinen Sasu S 27d04097ad add ramp up time for scheduling students to give doo api some time to spin up more machines ( hopefully ) 2019-05-23 13:51:44 +03:00
Sasu MäkinenandGitHub 612041a677 Merge pull request #924 from UniversityOfHelsinkiCS/trunk
bugfixes to updater
2019-05-23 13:33:29 +03:00
Mäkinen Sasu S 3469494a78 mroe clog 2019-05-23 13:07:08 +03:00
Mäkinen Sasu S 720260f1c8 maxInFlight to api 2019-05-23 12:51:25 +03:00
totutotu 58b2e769b5 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-23 12:48:41 +03:00
Mäkinen Sasu S 909670c9ae bugifx 2019-05-23 12:38:27 +03:00
Mäkinen Sasu S ff1bfb5284 TIMEZONE > timezone 2019-05-23 12:10:56 +03:00
totutotu 990034e597 link from overview table to population stats 2019-05-23 12:02:57 +03:00
Sasu MäkinenandGitHub 1ed4b2d388 Merge pull request #922 from UniversityOfHelsinkiCS/trunk
typo fix and max old space for npm scripts
2019-05-23 12:02:51 +03:00
Mäkinen Sasu S ffbdfb65f2 typo fix and max old space for npm scripts 2019-05-23 11:32:53 +03:00
Sasu MäkinenandGitHub cb04379f96 Merge pull request #921 from UniversityOfHelsinkiCS/trunk
remove active field from update task
2019-05-22 16:06:49 +03:00
Mäkinen Sasu S 387a322539 remove active field from update task 2019-05-22 15:36:24 +03:00
Sasu MäkinenandGitHub dbf77a8118 Merge pull request #920 from UniversityOfHelsinkiCS/trunk
Tests and file persisting nats
2019-05-22 15:06:55 +03:00
Mäkinen Sasu S 1189521a5a Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-22 14:39:33 +03:00
Mäkinen Sasu S bf0f6637eb persist nats on file and publish a bit more slowly to try to avoid max inflight 2019-05-22 14:39:27 +03:00
Rochet2 14e995acff fix merge 2019-05-22 14:19:35 +03:00
Rochet2 2bfd41b386 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-22 13:43:51 +03:00
Rochet2 83c0135153 fix oodikone so tests run, add new tests (also updated anon DB, so get new DB) 2019-05-22 13:43:44 +03:00
Sasu MäkinenandGitHub f595e83f41 Merge pull request #917 from UniversityOfHelsinkiCS/trunk
Remove useless function and refactoring scheduler
2019-05-22 10:44:53 +03:00
Mäkinen Sasu S a8d81cfcf7 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-22 10:28:18 +03:00
Mäkinen Sasu S 337a88efe6 Refactoring scheduler and adding on demand scripts for scheduling 2019-05-22 10:25:08 +03:00
esakemp abc5621580 remove useless function 2019-05-22 09:32:25 +03:00
Sasu MäkinenandGitHub 39aebdaf67 Merge pull request #915 from UniversityOfHelsinkiCS/trunk
Remove useless map and simple graduated filter
2019-05-21 17:09:10 +03:00
Mäkinen Sasu S 44d6a258ee removed useless map 2 2019-05-21 16:53:11 +03:00
Mäkinen Sasu S 7cb8252098 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-21 16:47:43 +03:00
Mäkinen Sasu S ba7d687c08 Simple graduated filter 2019-05-21 16:47:36 +03:00
Rochet2 b4ab7054bf Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-21 15:48:06 +03:00
Rochet2 96f6b82653 access to all studytracks and degrees in programme 2019-05-21 15:47:20 +03:00
esakemp 5b2bc2d53a Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-21 14:18:41 +03:00
esakemp ab1072c543 removed useless map 2019-05-21 13:56:21 +03:00
Sasu MäkinenandGitHub 67766bb0ed Merge pull request #913 from UniversityOfHelsinkiCS/trunk
Improve travis and new skribula for update student numbers
2019-05-21 13:00:23 +03:00
Mäkinen Sasu S 72b67b88bb Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-21 12:44:55 +03:00
Mäkinen Sasu S 1fc9a3681b update student number lsit on demand npm script 2019-05-21 12:44:51 +03:00
Rochet2 223f333aa4 improve travis 2019-05-21 12:19:20 +03:00
Sasu MäkinenandGitHub 712bde6199 Merge pull request #912 from UniversityOfHelsinkiCS/trunk
Seed course duplicates, add genders to throughput, switch to alpine node, fixes in student graph, bug fixes for updating analytics stuff and removing cypress recording
2019-05-21 11:34:40 +03:00
Rochet2 685902ce66 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-21 10:37:15 +03:00
Rochet2 a980e21ca9 dont record cypress 2019-05-21 10:37:06 +03:00
Mäkinen Sasu S 1ee786a9f5 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-21 10:32:03 +03:00
Mäkinen Sasu S d382be8c40 fix dco and cron for refreshing overview and shit 2019-05-21 10:31:57 +03:00
esakemp 383f6630ea Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-21 09:56:19 +03:00
Rochet2 d61f2ac547 empty analytics after changes to DB schema (old data must be invalidated so it is recalculated automatically) 2019-05-21 09:52:25 +03:00
esakemp 982c1df298 fix student statistics graph 2019-05-20 14:29:17 +03:00
Rochet2 be4a382749 Switch to alpine node to cut from 7gb to 1gb 2019-05-19 11:10:22 +03:00
Rochet2 60b0603d05 Merge branch 'master' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-18 11:12:36 +03:00
Rochet2 f7792c5523 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-18 11:12:24 +03:00
totutotu 5d5c2602e4 Genders to throughput table 2019-05-17 16:03:12 +03:00
Sasu MäkinenandGitHub a4c1a6f9fa Merge pull request #908 from UniversityOfHelsinkiCS/trunk
Update README.md (and some other stuff)
2019-05-17 15:12:57 +03:00
Rochet2 d484765a0f Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-17 15:01:14 +03:00
esakemp fd52f378f6 frontend fixes 2019-05-17 14:40:05 +03:00
Rochet2 dad386ac5f Seed course duplicates 2019-05-17 14:37:15 +03:00
Sasu MäkinenandGitHub 95f9ee9de6 Merge branch 'master' into trunk 2019-05-17 14:30:23 +03:00
Mäkinen Sasu S f6b12e38ee Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-17 14:11:31 +03:00
Mäkinen Sasu S c7b964200e updater stuff to travis build D::::: 2019-05-17 14:08:51 +03:00
Rochet2 5475710b99 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-17 13:56:41 +03:00
Rochet2 ead8de3bcc filters need to be reset when changing programmes, not appended 2019-05-17 13:55:58 +03:00
Rochet2 d347111f8a Ask for password earlier for DB when settign up 2019-05-17 13:54:37 +03:00
Rochet2 96a41c2603 Re enable after failure 2019-05-17 13:35:26 +03:00
Mäkinen Sasu S 006911ab88 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-17 13:31:25 +03:00
Mäkinen Sasu S 31b28d47d6 student number list updater stuff and other stuff 2019-05-17 13:30:32 +03:00
Rochet2 ffc9eb6a95 Use subject and message as key to task statuses 2019-05-17 13:21:08 +03:00
Rochet2 99ab05ce89 Fix tests not working sometimes because /wait not configured to custom entrypoint 2019-05-17 13:19:50 +03:00
Rochet2 e56f5ac786 Move tietosuojaseloste to root 2019-05-17 10:53:28 +03:00
Rochet2andGitHub 57bcd46ca4 Update README.md 2019-05-17 10:51:54 +03:00
Rochet2andGitHub cb62dbfe23 Update README.md 2019-05-17 10:50:46 +03:00
Rochet2andGitHub 406e87d513 Update README.md 2019-05-17 10:34:13 +03:00
Rochet2andGitHub 687c484fbe Update README.md 2019-05-17 10:33:49 +03:00
Rochet2andGitHub 75d8b4e499 Update README.md 2019-05-17 10:33:33 +03:00
Rochet2andGitHub 0180668a95 Fix variable evaluation, after_failure is done twice and tests fail randomly :( 2019-05-16 23:47:07 +03:00
Rochet2andGitHub 7e16e2253f Delete .dockerignore 2019-05-16 17:43:01 +03:00
Rochet2 3e78d05bd0 more slack notifications, hide url 2019-05-16 17:11:39 +03:00
Rochet2andGitHub c16f0f43dd Merge pull request #904 from UniversityOfHelsinkiCS/trunk
100 uutta featurea ja fixiä
2019-05-16 15:05:26 +03:00
Rochet2 5c6e417ad3 Fix travis yml 2019-05-16 14:13:59 +03:00
Rochet2 8419763168 slack viestit 2019-05-16 13:52:43 +03:00
Rochet2 a12bf63d39 fix front url 2019-05-16 13:41:44 +03:00
Rochet2 9972f3bd49 try fix nginx backend ip after restarting backend 2019-05-16 13:32:11 +03:00
Rochet2 ab10d1a82b return timeouts 2019-05-16 12:48:25 +03:00
Rochet2 2d3d4ac10c remove cypress timeouts 2019-05-16 12:34:08 +03:00
Rochet2 59d1fd9525 fix travis 2019-05-16 12:23:21 +03:00
Rochet2 183d29716b Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-16 10:06:39 +03:00
Rochet2 d382015879 Fix travis compose ymls 2019-05-16 10:06:33 +03:00
Mäkinen Sasu S f0119e0187 gitignore 2019-05-16 10:03:56 +03:00
Rochet2 7ad23043fc ignore shared models and migrations 2019-05-16 09:35:56 +03:00
Rochet2 02b65fbe4e dont use explicit paths to run tests 2019-05-16 09:26:10 +03:00
Rochet2 48d11c9259 Enable updater_writer and backend to use shared folder, fix dockerignores 2019-05-16 09:25:25 +03:00
esakemp 349bddafa8 course statistics shows course name 2019-05-16 09:16:38 +03:00
Rochet2andGitHub a8ec26965a Merge pull request #901 from UniversityOfHelsinkiCS/fixci
Fix CMD in dockerfiles
2019-05-15 20:14:35 +03:00
Rochet2 56322a77f0 Fix CMD in dockerfiles 2019-05-15 19:54:58 +03:00
Rochet2 2c248ea540 Try fix wait 2019-05-15 18:07:43 +03:00
Rochet2 1dd88fec26 Enable cron events in backend 2019-05-15 18:05:34 +03:00
Rochet2 0e4f28eaa2 Merge branch 'master' of github.com:UniversityOfHelsinkiCS/oodikone into fixci 2019-05-15 17:18:29 +03:00
Mäkinen Sasu S f039be6921 update tests in updater 2019-05-15 16:26:58 +03:00
Mäkinen Sasu S aa2ba42a2d Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-15 16:23:41 +03:00
Mäkinen Sasu S 56269daedf Update attainment dates 2019-05-15 16:20:09 +03:00
totutotu cf415c649e Set pop stats fetch to happen only on url change 2019-05-15 16:19:34 +03:00
totutotu cf255071a1 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-15 15:43:42 +03:00
totutotu 381ecdbb18 update tests 2019-05-15 15:39:54 +03:00
Rochet2 ee4d3a3956 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-15 15:32:14 +03:00
Rochet2 061c70cbca Delete orphans from course duplicates 2019-05-15 15:31:53 +03:00
Rochet2 3d2cace3d2 Update course code mapper 2019-05-15 15:31:19 +03:00
totutotu 9807285fd4 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-15 15:29:26 +03:00
totutotu b4f7edb15e Switch to simpler recalculate button 2019-05-15 15:29:21 +03:00
esakemp ac84fe4b18 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-15 15:22:20 +03:00
Mäkinen Sasu S 819ac415f3 updater stuff 2019-05-15 15:22:00 +03:00
esakemp f7f830f878 docker-compose-wait implemented 2019-05-15 15:21:45 +03:00
Rochet2 715782a10f Fix course statistics 2019-05-15 13:20:48 +03:00
Mäkinen Sasu S 7e84fcaaf3 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-15 13:20:12 +03:00
Mäkinen Sasu S 8b11c5030e updater bugfixes 2019-05-15 13:20:00 +03:00
Rochet2 6901ae51e4 Updater is not ready yet and tests fail 2019-05-15 12:24:53 +03:00
Rochet2 2ca0f8d358 Fix code mapper css screwing stuff up 2019-05-15 12:19:29 +03:00
Rochet2 f7ff8fce53 Add nats to backend, but keep the event handling disabled for now 2019-05-15 12:10:47 +03:00
Rochet2 182b45d63b Re enable cypress (deleted account and recreated) 2019-05-15 10:30:50 +03:00
Rochet2 be37a01501 Skip frontend build in development 2019-05-15 10:28:35 +03:00
Mäkinen Sasu S ec98eb909d remove updater tests until we actually want it in productioN 2019-05-15 10:04:50 +03:00
Rochet2 ae05e99bc4 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-14 17:02:44 +03:00
Rochet2 4912e5a244 Fix usage service setup in tests 2019-05-14 17:02:22 +03:00
totutotu 2a6ce61b02 Removed redis, set throughput to psql 2019-05-14 15:57:58 +03:00
Rochet2 f404ee5e2d Name updater containers 2019-05-14 15:43:32 +03:00
Rochet2 b432a10d92 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-14 15:23:51 +03:00
Ilkka Kuisma 06abdd09e6 Fix tests 2019-05-14 15:13:44 +03:00
Ilkka Kuisma c441e6affb DB Schema for analytics + save productivity to new DB. 2019-05-14 14:58:34 +03:00
Rochet2 a7fd5ff94c Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-14 14:34:03 +03:00
Mäkinen Sasu S 28c9181086 status messaging 2019-05-14 13:36:25 +03:00
Rochet2 ee0ae79648 update dockerfile to match others 2019-05-14 13:21:52 +03:00
Mäkinen Sasu S 6024a89acd husky test writer 2019-05-14 13:15:11 +03:00
Mäkinen Sasu S 632c48485d Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-14 13:14:14 +03:00
Mäkinen Sasu S ed812fafdb scheduler 2019-05-14 13:14:05 +03:00
Rochet2 6ca65add64 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-14 13:03:16 +03:00
esakemp ff3ee2f700 remove console.log 2019-05-14 12:53:45 +03:00
Ilkka KuismaandGitHub 02745c8187 Merge pull request #890 from UniversityOfHelsinkiCS/trunk
Enable 'show oodikone as this user' button + remove legacy columns from user db
2019-05-14 12:52:39 +03:00
Ilkka KuismaandGitHub 071c1ea253 Merge branch 'master' into trunk 2019-05-14 12:13:56 +03:00
esakemp a885d23830 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-14 11:58:33 +03:00
esakemp 2a76f06ab9 fixed small bug with student list in populations, removed unnecessary async from database_updater 2019-05-14 11:51:16 +03:00
Rochet2 67d4fcbb63 Merge branch 'trunk' of github.com:UniversityOfHelsinkiCS/oodikone into trunk 2019-05-14 11:47:51 +03:00
Rochet2 6786d87f6b make dockerfiles to be more efficient and faster 2019-05-14 11:47:45 +03:00
Ilkka Kuisma cbcfea7547 Enable 'show oodikone as this user' button again. 2019-05-14 11:36:22 +03:00
totutotu abeea77b1f removed legacy admin and czar fields 2019-05-14 10:16:09 +03:00
totutotu a2a5fe0457 remove unused is_enabled column from users 2019-05-14 09:44:00 +03:00
Mäkinen Sasu S bfca196ae9 Merge branch 'trunk' of https://github.com/UniversityOfHelsinkiCS/oodikone into trunk 2019-05-14 07:59:38 +03:00
Mäkinen Sasu S 63fcf2733e fix studyrights not being deleted before writing 2019-05-14 07:50:44 +03:00
Ilkka KuismaandGitHub 8a8d3eb642 Merge pull request #889 from UniversityOfHelsinkiCS/trunk
Show all providers in teacher stats for admins
2019-05-14 07:46:57 +03:00
Ilkka Kuisma 3e20a2713f Show all providers in teacher stats for admins 2019-05-14 07:19:49 +03:00
Ilkka KuismaandGitHub 27318ae3be Merge pull request #888 from UniversityOfHelsinkiCS/trunk
Disable automatic selection of options in filter dropdown lists.
2019-05-14 07:12:22 +03:00
Ilkka Kuisma 5978053775 Disable automatic selection of options in filter dropdown lists. 2019-05-14 06:41:07 +03:00
417 changed files with 12447 additions and 5593 deletions
+8 -1
View File
@@ -19,4 +19,11 @@ services/updater_writer/updater/test_assets/testi.bak
services/updater_writer/updater/test_assets/011120775.json
services/updater_writer/updater/test_assets/014272112.json
services/updater_writer/updater/test_assets/014441008.json
services/updater_writer/updater/test_assets/meta.json
services/updater_writer/updater/test_assets/meta.json
services/updater_scheduler/all_student_numbers.txt
services/updater_scheduler/debug.log
services/updater_scheduler/active_student_numbers.txt
services/oodikone2-backend/debug.log
datastore
services/updater_api/debug.log
services/backend/updater_writer/dumps
+13 -6
View File
@@ -16,6 +16,7 @@ services:
before_script:
- docker --version
- docker-compose --version
- export AUTHOR_NAME="$(git log -1 ${TRAVIS_COMMIT} --pretty="%aN")"
jobs:
include:
@@ -28,13 +29,16 @@ jobs:
- source scripts.sh && time run_e2e_setup docker-compose.lateste2e.yml
- docker ps
- cat nginx/log
- until $(curl --output /dev/null --silent --fail http://localhost:1337/staging/); do printf '.'; sleep 5; done
- docker-compose logs -f &
- until $(curl --output /dev/null --silent --fail http://localhost:1337/); do printf '.'; sleep 5; done
- time npm run test_services
- time CYPRESS_baseUrl=http://localhost:1337/staging/ npm run cypress:record
- time CYPRESS_baseUrl=http://localhost:1337/ npm run cypress:record
- docker ps -a
- if [[ $(docker ps --all | grep -Eo '(Exited|Restarting) \([0-9]+\)' | grep -Eo '[0-9]+' | awk '{ sum += $1 } END { print sum }') != '0' ]]; then echo 'Some process had nonzero exit code'; exit 1; fi
deploy: # deploy is always skipped for PR
provider: script
skip_cleanup: true
script: "docker-compose -f docker-compose.lateste2e.yml push && curl --fail -k -X POST -H \"Authorization: token ${TRAVIS_ACCESS_TOKEN}\" https://toska.cs.helsinki.fi/toskawatch/release/"
script: "docker-compose -f docker-compose.lateste2e.yml push && curl -X POST -H 'Content-type: application/json' --data \"{\\\"text\\\":\\\"Staging auto deployment started!\\\"}\" ${SLACKBOT_URL}"
on:
branch: master
- # in parallel
@@ -46,15 +50,18 @@ jobs:
- source scripts.sh && time run_e2e_setup docker-compose.lateste2e.production.yml
- docker ps
- cat nginx/log
- docker-compose logs -f &
- until $(curl --output /dev/null --silent --fail http://localhost:1337/); do printf '.'; sleep 5; done
- time npm run test_services
- time CYPRESS_baseUrl=http://localhost:1337/ npm run cypress:record
- docker ps -a
- if [[ $(docker ps --all | grep -Eo '(Exited|Restarting) \([0-9]+\)' | grep -Eo '[0-9]+' | awk '{ sum += $1 } END { print sum }') != '0' ]]; then echo 'Some process had nonzero exit code'; exit 1; fi
deploy: # deploy is always skipped for PR
provider: script
skip_cleanup: true
script: docker-compose -f docker-compose.lateste2e.production.yml push && echo "Done, please MANUAL DEPLOY"
script: "docker-compose -f docker-compose.lateste2e.production.yml push && curl -X POST -H 'Content-type: application/json' --data \"{\\\"text\\\":\\\"${TRAVIS_TAG} release started auto deployment!\\\"}\" ${SLACKBOT_URL}"
on:
tags: true
after_script:
- docker-compose logs
after_failure:
- "curl -X POST -H 'Content-type: application/json' --data \"{\\\"text\\\":\\\"${IMAGE} buildi paskana. STOP AND FIX tai tulee kenkää! *${AUTHOR_NAME}* ${TRAVIS_BUILD_WEB_URL}\\\"}\" ${SLACKBOT_URL}"
+7 -7
View File
@@ -1,9 +1,9 @@
{
"projectId": "c8bfes",
"defaultCommandTimeout": 120000,
"execTimeout": 120000,
"taskTimeout": 120000,
"pageLoadTimeout": 120000,
"requestTimeout": 120000,
"responseTimeout": 120000
"projectId": "c3jsph",
"defaultCommandTimeout": 60000,
"execTimeout": 60000,
"taskTimeout": 60000,
"pageLoadTimeout": 60000,
"requestTimeout": 60000,
"responseTimeout": 60000
}
+75
View File
@@ -0,0 +1,75 @@
describe('Course Statistics tests', () => {
beforeEach(() => {
cy.server({
onAnyRequest: function (route, proxy) {
if (Cypress.config().baseUrl.includes("http://localhost:1337/")) {
proxy.xhr.setRequestHeader('uid', 'tktl')
proxy.xhr.setRequestHeader('shib-session-id', 'mock-shibboleth')
proxy.xhr.setRequestHeader('hygroupcn', 'grp-oodikone-users')
proxy.xhr.setRequestHeader('edupersonaffiliation', 'asdasd')
}
}
})
console.log(Cypress.config().baseUrl)
cy.visit(Cypress.config().baseUrl)
cy.contains("Course statistics").click()
cy.contains("Search for courses")
})
it('Searching single course having duplicate mappings shows course statistics', () => {
cy.url().should('include', '/coursestatistics')
cy.contains("Search for courses")
cy.get("input[placeholder='Search by entering a course code']").type('TKT20003')
cy.contains("tr", "TKT20003").click()
cy.contains("Fetch statistics").should('be.enabled').click()
cy.contains("Search for courses").should('not.exist')
cy.contains("Käyttöjärjestelmät")
cy.contains("TKT20003")
cy.contains("582640") // old mapped code
cy.contains(".tabular.menu a", "Table").click()
cy.contains("All")
cy.contains(".modeSelectorRow a", "Cumulative").click()
cy.contains(".modeSelectorRow a", "Student").click()
cy.contains(".modeSelectorRow a", "Grades").click()
cy.contains(".tabular.menu a", "Pass rate chart").click()
cy.get("div.modeSelectorContainer").click()
cy.contains("svg", "Pass rate chart")
cy.contains(".tabular.menu a", "Grade distribution chart").click()
cy.get("div.modeSelectorContainer").click()
cy.contains("svg", "Grades")
cy.contains("a", "New query").click()
cy.contains("Search for courses")
})
it('Searching multiple courses having duplicate mappings shows course statistics', () => {
cy.url().should('include', '/coursestatistics')
cy.contains("Search for courses")
cy.get("input[placeholder='Search by entering a course code']").type('TKT')
cy.contains("tr", "TKT20003").click()
cy.contains("tr", "TKT10002").click()
cy.contains("Fetch statistics").should('be.enabled').click()
cy.contains("Search for courses").should('not.exist')
cy.contains('.courseNameCell', "Käyttöjärjestelmät").contains("TKT20003").click()
cy.contains('.courseNameCell', "Ohjelmoinnin perusteet").should('not.exist');
cy.contains("TKT20003")
cy.contains("582640") // old mapped code
cy.contains("Summary").click()
cy.contains('.courseNameCell', "Ohjelmoinnin perusteet").contains("TKT10002").click()
cy.contains('.courseNameCell', "Käyttöjärjestelmät").should('not.exist');
cy.contains("TKT10002")
cy.contains("581325") // old mapped code
cy.contains("Summary").click()
cy.contains("a", "New query").click()
cy.contains("Search for courses")
})
})
+9 -3
View File
@@ -80,7 +80,7 @@ describe('Population Statistics tests', () => {
cy.contains("add").click()
cy.contains("Add filters").siblings().within(() => {
cy.get(".form").should('have.length', 8)
cy.get(".form").should('have.length', 10)
})
checkAmountOfStudents(26)
@@ -102,15 +102,15 @@ describe('Population Statistics tests', () => {
cy.contains("DIGI-000A")
cy.go("back")
cy.contains("Courses of Population").parentsUntil(".ui.segment").parent().within(() => {
cy.contains("number at least").siblings().within(() => cy.get("input").clear().type("0"))
cy.contains("Matematiikan didaktiikka").siblings().eq(2).should("have.text", '9')
})
cy.get(".refresh").eq(1).click()
cy.contains("Courses of Population").parentsUntil(".ui.segment").parent().within(() => {
cy.get(".refresh").click()
cy.contains("number at least").siblings().within(() => cy.get("input").clear().type("0"))
cy.contains("Matematiikan didaktiikka").siblings().eq(2).should("have.text", '1')
})
@@ -153,6 +153,11 @@ describe('Population Statistics tests', () => {
cy.contains("Spring 2018").parentsUntil("form").contains("set filter").click()
cy.contains("Students that were present").should('have.text', "Students that were present during Fall 2018, Spring 2018")
cy.contains('graduated from Kasvatustieteiden kandiohjelma').contains('have/not').click().siblings().contains('have not').click()
cy.contains('graduated from Kasvatustieteiden kandiohjelma').contains('set filter').click()
cy.contains('Showing students that have not graduated from Kasvatustieteiden kandiohjelma')
checkAmountOfStudents(17)
cy.contains("have/haven't").click().siblings().contains('haven\'t').click()
@@ -200,6 +205,7 @@ describe('Population Statistics tests', () => {
cy.contains('Excluded students that graduated')
cy.contains("Students that has").parentsUntil("form").within(() => {
cy.contains("degree").click().siblings().contains("any degree").click()
cy.contains("programme").click().siblings().contains("Kasvatustieteiden kandiohjelma")
@@ -56,6 +56,14 @@ describe('Student Statistics tests', () => {
cy.contains('Credits').should('not.exist')
})
it('Can jump to course', () => {
cy.get('.prompt').type('Oinonen')
cy.contains('011143561').click()
cy.contains('Toinen kotimainen kieli (40061)').siblings().within(() => { cy.get('.level').click() })
cy.url().should('include', '/coursestatistics')
cy.contains('Toinen kotimainen kieli')
})
it('Searching with bad inputs doesnt yield results', () => {
cy.get('.prompt').type('Oin')
cy.contains('Student number').should('not.exist')
+32 -2
View File
@@ -15,6 +15,30 @@ describe('Studyprogramme overview', () => {
cy.contains("Study Programme", { timeout: 100000 })
})
it('can search for course mappings', () => {
cy.contains("Tietojenkäsittelytieteen kandiohjelma").click()
cy.contains('Code Mapper').click()
cy.contains('tr', 'TKT20003 Käyttöjärjestelmät').within(($tr) => { cy.get('input').type('582219') })
cy.contains('tr', 'TKT20003 Käyttöjärjestelmät').within(($tr) => { cy.get('.results').contains("Käyttöjärjestelmät (582219)") })
cy.contains('tr', 'TKT20003 Käyttöjärjestelmät').within(($tr) => { cy.contains('button', "Add") })
})
it('can view course groups', () => {
cy.contains("Kasvatustieteiden kandiohjelma").click()
cy.contains('Course Groups').click()
cy.contains('tr', 'Test course group').get('i.edit').click()
cy.contains("Edit group")
cy.get('.prompt').type("Professori Pekka")
cy.contains("Add teacher").parent().contains("9000960")
cy.contains("Teachers in group").parent().contains("9000960")
cy.get("i.reply.link.icon").click()
cy.contains('tr a', 'Test course group').click()
cy.contains("Total teachers")
cy.get("i.reply.icon").click()
})
it('renders progress and productivity tables', () => {
cy.contains("Tietojenkäsittelytieteen kandiohjelma").click()
cy.get('table').should('have.length', 2)
@@ -23,7 +47,7 @@ describe('Studyprogramme overview', () => {
cy.contains("2018-2019").siblings().contains('9')
cy.contains("2017-2018").siblings().contains('12').siblings().contains('7').siblings().contains('2')
cy.get('table').eq(1).contains('2018').siblings().contains('443')
cy.get('table').eq(1).contains('2017').siblings().contains('383')
cy.get('table').eq(1).contains('2017').siblings().contains('381')
})
it('can search for mandatory courses', () => {
@@ -40,5 +64,11 @@ describe('Studyprogramme overview', () => {
cy.contains('Thesis Courses').click()
cy.contains('Add thesis course').click()
cy.contains('No results')
})
})
it('can move to Population statistics page by clickin', () => {
cy.contains('Tietojenkäsittelytieteen kandiohjelma').click()
cy.get('i.level.up.alternate.icon').eq(0).click()
cy.contains('Credit accumulation (for 9 students)')
})
})
+39
View File
@@ -0,0 +1,39 @@
describe('Users tests', () => {
beforeEach(() => {
cy.server({
onAnyRequest: function (route, proxy) {
if (Cypress.config().baseUrl.includes("http://localhost:1337/")) {
proxy.xhr.setRequestHeader('uid', 'admink')
proxy.xhr.setRequestHeader('shib-session-id', 'mock-shibboleth')
proxy.xhr.setRequestHeader('hygroupcn', 'grp-oodikone-users')
proxy.xhr.setRequestHeader('edupersonaffiliation', 'asdasd')
}
}
})
console.log(Cypress.config().baseUrl)
cy.visit(Cypress.config().baseUrl)
cy.reload()
cy.contains("Users").click()
cy.contains("Enable or disable access to Oodikone")
})
it("Admin mocking normal user shows only the mocked user's programmes", () => {
cy.contains("mocking").should('not.exist')
cy.contains("tr", "Normaalikäyttäjä").within(($row) => {
cy.contains('button', 'Edit').click()
})
cy.contains("Access rights").siblings().within(($row) => {
cy.get("div[role='listitem']").should('have.length', 1).contains("Tietojenkäsittelytieteen kandiohjelma")
})
cy.get('i.spy').click()
cy.contains("mocking as normk")
cy.contains("Study programme").click().siblings().contains("Search by class").click()
cy.contains("label", "Study programme")
cy.contains("label", "Study programme").siblings().within(($row) => {
cy.get("div[role='option']").should('have.length', 1).contains("Tietojenkäsittelytieteen kandiohjelma")
})
})
})
+99 -17
View File
@@ -1,6 +1,13 @@
version: '3'
services:
nats:
image: nats-streaming
command: -cid updaterNATS
expose:
- "4222"
container_name: nats
analytics_db:
image: postgres:9.6.3
ports:
@@ -53,25 +60,16 @@ services:
- ./analytics-redis-data:/data
container_name: analytics_redis
mongo_db:
image: mongo
restart: unless-stopped
volumes:
- ./backups/mongo/oodilearn:/dump
- ./mongodata:/data/db
ports:
- "27017:27017"
container_name: mongo_db
backend:
image: toska/oodikone2-backend:latest
build:
context: services/oodikone2-backend
restart: unless-stopped
context: services/backend
dockerfile: oodikone2-backend/Dockerfile
ports:
- "8080:8080"
- "9229:9229"
environment:
WAIT_HOSTS: redis:6379,db:5432,nats:4222
REDIS: redis
DB_URL: postgres://postgres@db:5432/tkt_oodi
TEST_DB: postgres://postgres@db:5432/tkt_oodi_test
@@ -79,14 +77,18 @@ services:
TOKEN_SECRET: IWannaBeTheVeryBest
OODILEARN_URL: http://oodilearn:5000
USERSERVICE_URL: http://userservice:4567
USAGESERVICE_URL: http://usageservice:545
USERSERVICE_SECRET: Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
USAGESERVICE_SECRET: Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
ANALYTICS_ADMINER_URL: http://localhost:5050/?pgsql=analytics_db&username=postgres
ANALYTICS_URL: http://analytics:4568
NATS_URI: nats://nats:4222
DB_SCHEMA_KONE: kone_data
container_name: backend
entrypoint: 'node --inspect=0.0.0.0:9229 --max_old_space_size=4096 index.js'
depends_on:
- db
- redis
- nats
frontend:
image: toska/oodikone2-frontend:latest
@@ -94,10 +96,10 @@ services:
context: services/oodikone2-frontend
args:
BASE_PATH: /
restart: unless-stopped
ports:
- "5000:5000"
environment:
WAIT_HOSTS: user_db:5432
BACKEND_ADDR: backend
ADMINER_URL: http://localhost:5050/?pgsql=db&username=postgres
container_name: frontend
@@ -106,10 +108,10 @@ services:
image: toska/oodikone2-userservice:latest
build:
context: services/oodikone2-userservice
restart: unless-stopped
ports:
- 4567:4567
environment:
- WAIT_HOSTS=user_db:5432
- DB_URL=postgres://postgres@user_db:5432/user_db
- TEST_DB=postgres://postgres@user_db:5432/user_db_test
- SECRET=Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
@@ -118,14 +120,40 @@ services:
- user_db
container_name: userservice
usageservice:
image: toska/oodikone2-usageservice:latest
build:
context: services/oodikone2-usageservice
ports:
- 545:545
environment:
- WAIT_HOSTS=usage_db:5432
- PORT=545
- DB_URL=postgres://postgres@usage_db:5432/usage_db
- SECRET=Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
depends_on:
- usage_db
container_name: usageservice
usage_db:
image: postgres:9.6.3
ports:
- "5424:5432"
volumes:
- ./usage_pgdata:/var/lib/postgresql/data
container_name: oodi_usage_db
environment:
- POSTGRES_USER=postgres
- POSTGRES_DB=usage_db
analytics:
image: toska/oodikone2-analytics:latest
build:
context: services/oodikone2-analytics
restart: unless-stopped
ports:
- 4568:4568
environment:
- WAIT_HOSTS=analytics_db:5432,analytics_redis:6379
- REDIS=analytics_redis
- DB_URL=postgres://postgres@analytics_db:5432/analytics_db
- TEST_DB=postgres://postgres@analytics_db:5432/analytics_db_test
@@ -134,9 +162,63 @@ services:
- analytics_redis
container_name: analytics
updater_api:
image: toska/updater_api:latest
build:
context: services/updater_api
depends_on:
- nats
environment:
- WAIT_HOSTS=nats:4222
- NATS_URI=nats://nats:4222
- OODI_ADDR=https://oodikone.cs.helsinki.fi/oodi
- TOKEN=toskab1gs8cret5
container_name: updater_api
updater_writer:
image: toska/updater_writer:latest
build:
context: services/backend
dockerfile: updater_writer/Dockerfile
depends_on:
- nats
- db
environment:
WAIT_HOSTS: nats:4222,db:5432
NATS_URI: nats://nats:4222
DB_URL: postgres://postgres@db:5432/tkt_oodi
TEST_DB: postgres://postgres@db:5432/tkt_oodi_test
TEST_DB_SCHEMA: updater_test
container_name: updater_writer
scheduler_mongo:
image: mongo
volumes:
- ./mongodata:/data/db
expose:
- "27017"
container_name: scheduler_db
updater_scheduler:
image: toska/updater_scheduler:latest
build:
context: services/updater_scheduler
command: ["echo", "mluukkai on orjuuttaja"]
depends_on:
- nats
- scheduler_mongo
environment:
- WAIT_HOSTS=nats:4222,scheduler_mongo:27017
- NATS_URI=nats://nats:4222
- MONGO_URI=mongodb://scheduler_mongo:27017
- STUDENT_NUMBERS=./all_student_numbers.txt
- ACTIVE_STUDENTS=./active_student_numbers.txt
- OODI_ADDR=https://oodikone.cs.helsinki.fi/oodi
- TOKEN=toskab1gs8cret5
container_name: updater_scheduler
nginx:
image: nginx:latest
restart: unless-stopped
volumes:
- ./nginx.production.conf:/etc/nginx/nginx.conf
- ./nginx/error.log:/etc/nginx/error_log.log
+103 -19
View File
@@ -1,6 +1,15 @@
version: '3'
services:
nats:
image: nats-streaming
command: -cid updaterNATS --file_slice_max_bytes 0 --file_slice_max_age 100h -store file -dir datastore
expose:
- "4222"
volumes:
- ./datastore:/datastore
container_name: nats
analytics_db:
image: postgres:9.6.3
ports:
@@ -53,25 +62,16 @@ services:
- ./analytics-redis-data:/data
container_name: analytics_redis
mongo_db:
image: mongo
restart: unless-stopped
volumes:
- ./backups/mongo/oodilearn:/dump
- ./mongodata:/data/db
ports:
- "27017:27017"
container_name: mongo_db
backend:
image: toska/oodikone2-backend:staging
build:
context: services/oodikone2-backend
restart: unless-stopped
context: services/backend
dockerfile: oodikone2-backend/Dockerfile
ports:
- "8080:8080"
- "9229:9229"
environment:
WAIT_HOSTS: redis:6379,db:5432,nats:4222
REDIS: redis
DB_URL: postgres://postgres@db:5432/tkt_oodi
TEST_DB: postgres://postgres@db:5432/tkt_oodi_test
@@ -79,37 +79,41 @@ services:
TOKEN_SECRET: IWannaBeTheVeryBest
OODILEARN_URL: http://oodilearn:5000
USERSERVICE_URL: http://userservice:4567
USAGESERVICE_URL: http://usageservice:545
USERSERVICE_SECRET: Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
USAGESERVICE_SECRET: Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
ANALYTICS_ADMINER_URL: http://localhost:5050/?pgsql=analytics_db&username=postgres
ANALYTICS_URL: http://analytics:4568
NATS_URI: nats://nats:4222
DB_SCHEMA_KONE: kone_data
container_name: backend
entrypoint: 'node --inspect=0.0.0.0:9229 --max_old_space_size=4096 index.js'
depends_on:
- db
- redis
- nats
frontend:
image: toska/oodikone2-frontend:staging
build:
context: services/oodikone2-frontend
args:
BASE_PATH: /staging/
restart: unless-stopped
BASE_PATH: /
ports:
- "5000:5000"
environment:
WAIT_HOSTS: user_db:5432
BACKEND_ADDR: backend
ADMINER_URL: http://localhost:5050/?pgsql=db&username=postgres
container_name: frontend
userservice:
image: toska/oodikone2-userservice:staging
build:
context: services/oodikone2-userservice
restart: unless-stopped
ports:
- 4567:4567
environment:
- WAIT_HOSTS=user_db:5432
- DB_URL=postgres://postgres@user_db:5432/user_db
- TEST_DB=postgres://postgres@user_db:5432/user_db_test
- SECRET=Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
@@ -118,14 +122,40 @@ services:
- user_db
container_name: userservice
usageservice:
image: toska/oodikone2-usageservice:staging
build:
context: services/oodikone2-usageservice
ports:
- 545:545
environment:
- WAIT_HOSTS=usage_db:5432
- PORT=545
- DB_URL=postgres://postgres@usage_db:5432/usage_db
- SECRET=Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
depends_on:
- usage_db
container_name: usageservice
usage_db:
image: postgres:9.6.3
ports:
- "5424:5432"
volumes:
- ./usage_pgdata:/var/lib/postgresql/data
container_name: oodi_usage_db
environment:
- POSTGRES_USER=postgres
- POSTGRES_DB=usage_db
analytics:
image: toska/oodikone2-analytics:staging
build:
context: services/oodikone2-analytics
restart: unless-stopped
ports:
- 4568:4568
environment:
- WAIT_HOSTS=analytics_db:5432,analytics_redis:6379
- REDIS=analytics_redis
- DB_URL=postgres://postgres@analytics_db:5432/analytics_db
- TEST_DB=postgres://postgres@analytics_db:5432/analytics_db_test
@@ -134,9 +164,63 @@ services:
- analytics_redis
container_name: analytics
updater_api:
image: toska/updater_api:staging
build:
context: services/updater_api
depends_on:
- nats
environment:
- WAIT_HOSTS=nats:4222
- NATS_URI=nats://nats:4222
- OODI_ADDR=https://oodikone.cs.helsinki.fi/oodi
- TOKEN=toskab1gs8cret5
container_name: updater_api
updater_writer:
image: toska/updater_writer:staging
build:
context: services/backend
dockerfile: updater_writer/Dockerfile
depends_on:
- nats
- db
environment:
WAIT_HOSTS: nats:4222,db:5432
NATS_URI: nats://nats:4222
DB_URL: postgres://postgres@db:5432/tkt_oodi
TEST_DB: postgres://postgres@db:5432/tkt_oodi_test
TEST_DB_SCHEMA: updater_test
container_name: updater_writer
scheduler_mongo:
image: mongo
volumes:
- ./mongodata:/data/db
expose:
- "27017"
container_name: scheduler_db
updater_scheduler:
image: toska/updater_scheduler:staging
build:
context: services/updater_scheduler
command: ["echo", "mluukkai on orjuuttaja"]
depends_on:
- nats
- scheduler_mongo
environment:
- WAIT_HOSTS=nats:4222,scheduler_mongo:27017
- NATS_URI=nats://nats:4222
- MONGO_URI=mongodb://scheduler_mongo:27017
- STUDENT_NUMBERS=./all_student_numbers.txt
- ACTIVE_STUDENTS=./active_student_numbers.txt
- OODI_ADDR=https://oodikone.cs.helsinki.fi/oodi
- TOKEN=toskab1gs8cret5
container_name: updater_scheduler
nginx:
image: nginx:latest
restart: unless-stopped
volumes:
- ./nginx.staging.conf:/etc/nginx/nginx.conf
- ./nginx/error.log:/etc/nginx/error_log.log
+85 -26
View File
@@ -29,9 +29,11 @@ services:
nats:
image: nats-streaming
command: -cid updaterNATS
command: -cid updaterNATS --file_slice_max_bytes 0 --file_slice_max_age 100h -store file -dir datastore
expose:
- "4222"
volumes:
- ./datastore:/datastore
ports:
- "8222:8222"
- "4222:4222"
@@ -58,6 +60,7 @@ services:
environment:
- POSTGRES_USER=postgres
- POSTGRES_MULTIPLE_DATABASES=user_db,user_db_real
usage_db:
image: postgres:9.6.3
ports:
@@ -102,14 +105,16 @@ services:
backend:
build:
context: services/oodikone2-backend
context: services/backend
dockerfile: oodikone2-backend/Dockerfile
args:
NODE_ENV: 'development'
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && npm run dev']
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && /wait && npm run dev']
restart: unless-stopped
ports:
- "8080:8080"
environment:
WAIT_HOSTS: redis:6379,db:5432,nats:4222
REDIS: redis
DB_URL: postgres://postgres@db:5432/tkt_oodi
TEST_DB: postgres://postgres@db:5432/tkt_oodi_test
@@ -121,21 +126,26 @@ services:
USERSERVICE_SECRET: Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
USAGESERVICE_SECRET: Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
ANALYTICS_URL: http://analytics:4568
NATS_URI: nats://nats:4222
DB_SCHEMA_KONE: kone_data
volumes:
- ./services/oodikone2-backend/:/usr/src/app
- ./shared/models:/usr/src/app/src/models
- ./shared/migrations:/usr/src/app/src/database/migrations
- ./services/backend/oodikone2-backend/:/usr/src/app
- ./services/backend/shared/models:/usr/src/app/src/models
- ./services/backend/shared/migrations:/usr/src/app/src/database/migrations
- ./services/backend/shared/migrations_kone:/usr/src/app/src/database/migrations_kone
container_name: backend
depends_on:
- db
- redis
- nats
frontend:
build:
context: services/oodikone2-frontend
args:
NODE_ENV: 'development'
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && npm run docker']
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && /wait && npm run docker']
restart: unless-stopped
ports:
- "8081:8081"
@@ -171,17 +181,18 @@ services:
context: services/oodikone2-userservice
args:
NODE_ENV: 'development'
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && npm run dev']
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && /wait && npm run dev']
restart: unless-stopped
volumes:
- ./services/oodikone2-userservice/:/usr/src/app
ports:
- 4567:4567
environment:
- DB_URL=postgres://postgres@user_db:5432/user_db
- TEST_DB=postgres://postgres@user_db:5432/user_db_test
- SECRET=Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
- TOKEN_SECRET=IWannaBeTheVeryBest
WAIT_HOSTS: user_db:5432
DB_URL: postgres://postgres@user_db:5432/user_db
TEST_DB: postgres://postgres@user_db:5432/user_db_test
SECRET: Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
TOKEN_SECRET: IWannaBeTheVeryBest
depends_on:
- user_db
container_name: userservice
@@ -191,16 +202,19 @@ services:
context: services/oodikone2-usageservice
args:
NODE_ENV: 'development'
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && npm run dev']
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && /wait && npm run dev']
restart: unless-stopped
ports:
- 545:545
environment:
- PORT=545
- DB_URL=postgres://postgres@usage_db:5432/usage_db
- SECRET=Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
WAIT_HOSTS: usage_db:5432
PORT: '545'
DB_URL: postgres://postgres@usage_db:5432/usage_db
SECRET: Luukk4inenApprov3dVitunMinttuSalainenAvain666NurmivaaraPJ2019
volumes:
- ./services/oodikone2-usageservice/:/usr/src/app
depends_on:
- usage_db
container_name: usageservice
updater_api:
@@ -208,36 +222,80 @@ services:
context: services/updater_api
args:
NODE_ENV: 'development'
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && npm run dev']
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && /wait && npm run dev']
restart: unless-stopped
volumes:
- ./services/updater_api/:/usr/src/app
depends_on:
- nats
environment:
- WAIT_HOSTS=nats:4222
- NATS_URI=nats://nats:4222
- OODI_ADDR=https://oodikone.cs.helsinki.fi/oodi
- TOKEN=toskab1gs8cret5
container_name: updater_api
updater_writer:
build:
context: services/updater_writer
context: services/backend
dockerfile: updater_writer/Dockerfile
args:
NODE_ENV: 'development'
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && npm run dev']
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && /wait && npm run dev']
restart: unless-stopped
volumes:
- ./services/updater_writer/:/usr/src/app
- ./shared/models:/usr/src/app/models
- ./shared/migrations:/usr/src/app/database/migrations
- ./services/backend/updater_writer/:/usr/src/app
- ./services/backend/shared/models:/usr/src/app/models
- ./services/backend/shared/migrations:/usr/src/app/database/migrations
- ./services/backend/shared/migrations_kone:/usr/src/app/database/migrations_kone
depends_on:
- nats
- db
environment:
WAIT_HOSTS: nats:4222,db:5432
NATS_URI: nats://nats:4222
DB_URL: postgres://postgres@db:5432/tkt_oodi
TEST_DB: postgres://postgres@db:5432/tkt_oodi_test
TEST_DB_SCHEMA: updater_test
DB_SCHEMA_KONE: kone_data
scheduler_mongo:
image: mongo
restart: unless-stopped
volumes:
- ./mongodata:/data/db
expose:
- "27017"
container_name: scheduler_db
updater_scheduler:
build:
context: services/updater_scheduler
args:
NODE_ENV: 'development'
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && /wait && npm run dev']
restart: unless-stopped
volumes:
- ./services/updater_scheduler/:/usr/src/app
depends_on:
- nats
- scheduler_mongo
environment:
- WAIT_HOSTS=nats:4222,scheduler_mongo:27017
- NATS_URI=nats://nats:4222
- MONGO_URI=mongodb://scheduler_mongo:27017
- STUDENT_NUMBERS=./all_student_numbers.txt
- ACTIVE_STUDENTS=./active_student_numbers.txt
- OODI_ADDR=https://oodikone.cs.helsinki.fi/oodi
- TOKEN=toskab1gs8cret5
- LOG_HOST=toska.cs.helsinki.fi
- LOG_PORT=9501
- LOG_HOSTNAME=updater_scheduler
container_name: updater_scheduler
analytics:
@@ -245,16 +303,17 @@ services:
context: services/oodikone2-analytics
args:
NODE_ENV: 'development'
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && npm run dev']
command: ['sh', '-c', 'cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/ && /wait && npm run dev']
restart: unless-stopped
volumes:
- ./services/oodikone2-analytics/:/usr/src/app
ports:
- 4568:4568
environment:
- REDIS=analytics_redis
- DB_URL=postgres://postgres@analytics_db:5432/analytics_db
- TEST_DB=postgres://postgres@analytics_db:5432/analytics_db_test
WAIT_HOSTS: analytics_db:5432,analytics_redis:6379
REDIS: analytics_redis
DB_URL: postgres://postgres@analytics_db:5432/analytics_db
TEST_DB: postgres://postgres@analytics_db:5432/analytics_db_test
depends_on:
- analytics_db
- analytics_redis
+2 -2
View File
@@ -8,11 +8,11 @@ http {
server {
listen 80;
location /staging/ {
location / {
proxy_pass http://frontend:5000/;
}
location /staging/api/ {
location /api/ {
proxy_pass http://backend:8080/;
}
}
+16
View File
@@ -22,6 +22,10 @@ options=(
"e2e setup"
"Anon setup"
"Full setup"
"Reset anon db"
"Reset real db"
"Download latest anon db"
"Download latest real db"
"Full reset"
"Quit"
)
@@ -40,6 +44,18 @@ do
mopo
run_full_setup
;;
"Reset anon db")
reset_db
;;
"Reset real db")
reset_real_db
;;
"Download latest anon db")
get_anon_oodikone
;;
"Download latest real db")
get_oodikone_server_backup
;;
"Full reset")
purge
;;
+6 -6
View File
@@ -2,9 +2,9 @@
# stop on first error
set -e
npm run --prefix services/oodikone2-backend test_docker
npm test --prefix services/oodikone2-analytics
npm run --prefix services/oodikone2-userservice test_docker
npm test --prefix services/oodikone2-usageservice
npm run --prefix services/oodikone2-frontend test_docker
docker-compose exec -T backend npm test
docker-compose exec -T userservice npm test
docker-compose exec -T frontend npm test
docker-compose exec -T analytics npm test
docker-compose exec -T usageservice npm test
# docker-compose exec -T updater_writer npm test
+64 -64
View File
@@ -1,14 +1,15 @@
#!/bin/bash
DIR_PATH=$(dirname "$0")
ANONDB_DIR=anonyymioodi
BACKUP_DIR=backups
PSQL_DB_BACKUP="$BACKUP_DIR/anon.bak"
USER_DB_BACKUP="$BACKUP_DIR/user-dump.bak"
PSQL_REAL_DB_BACKUP="$BACKUP_DIR/latest-pg.bak"
USER_REAL_DB_BACKUP="$BACKUP_DIR/latest-user-pg.bak"
PSQL_DB_BACKUP="$ANONDB_DIR/anon.sqz"
USER_DB_BACKUP="$ANONDB_DIR/user-dump.sqz"
PSQL_REAL_DB_BACKUP="$BACKUP_DIR/latest-pg.sqz"
USER_REAL_DB_BACKUP="$BACKUP_DIR/latest-user-pg.sqz"
retry () {
for i in {1..10}
for i in {1..60}
do
$@ && break || echo "Retry attempt $i failed, waiting..." && sleep 10;
done
@@ -44,37 +45,29 @@ get_anon_oodikone() {
file=./private.key
if [ -e "$file" ]; then
echo "Private key exists"
else
else
echo "No private key, echoing from environment variable OODI_KEY"
echo "$OODI_KEY" | awk '{gsub("\\\\n","\n")};1' > private.key
chmod 400 private.key
fi
rm -rf anonyymioodi
GIT_SSH_COMMAND='ssh -i private.key' git clone git@github.com:UniversityOfHelsinkiCS/anonyymioodi.git
mv anonyymioodi/anon.bak.bz2 ./$BACKUP_DIR/anon.bak.bz2
mv anonyymioodi/user-dump.bak.bz2 ./$BACKUP_DIR/user-dump.bak.bz2
}
unpack_oodikone_server_backup() {
bunzip2 -d -v ./$BACKUP_DIR/*.bz2
}
restore_psql_from_backup () {
cat $PSQL_DB_BACKUP | docker exec -i -u postgres oodi_db psql -d tkt_oodi
time pg_restore -U postgres -h localhost -p 5421 --no-owner -F c --dbname=tkt_oodi -j4 $PSQL_DB_BACKUP
}
restore_real_psql_from_backup () {
cat $PSQL_REAL_DB_BACKUP | docker exec -i -u postgres oodi_db psql -d tkt_oodi_real
time pg_restore -U postgres -h localhost -p 5421 --no-owner -F c --dbname=tkt_oodi_real -j4 $PSQL_REAL_DB_BACKUP
}
restore_userdb_from_backup () {
docker exec -u postgres oodi_user_db psql -c "CREATE DATABASE user_db"
cat $USER_DB_BACKUP | docker exec -i -u postgres oodi_user_db psql -d user_db
time pg_restore -U postgres -h localhost -p 5422 --no-owner -F c --dbname=user_db -j4 $USER_DB_BACKUP
}
restore_real_userdb_from_backup () {
docker exec -u postgres oodi_user_db psql -c "CREATE DATABASE user_db_real"
cat $USER_REAL_DB_BACKUP | docker exec -i -u postgres oodi_user_db psql -d user_db_real
time pg_restore -U postgres -h localhost -p 5422 --no-owner -F c --dbname=user_db_real -j4 $USER_REAL_DB_BACKUP
}
# oodilearn
@@ -82,34 +75,14 @@ restore_real_userdb_from_backup () {
# docker exec -t mongo_db mongorestore -d oodilearn "/dump"
# }
db_oodikone_reset () {
docker exec -u postgres oodi_db dropdb "tkt_oodi" || echo "dbdrop of tkt_oodi failed. "
docker exec -u postgres oodi_db createdb "tkt_oodi" || echo "createdb of tkt_oodi failed. "
restore_psql_from_backup
}
ping_psql () {
echo "Pinging psql in container $1 with db name $2"
retry docker exec -u postgres $1 pg_isready
docker exec -u postgres oodi_db psql -c "CREATE DATABASE tkt_oodi" || echo "tkt_oodi DB already exists"
echo "Pinging psql in container $1 with db name tkt_oodi_test"
docker exec -u postgres oodi_db psql -c "CREATE DATABASE tkt_oodi_test" || echo "tkt_oodi_test DB already exists"
retry docker exec -u postgres $1 pg_isready
}
ping_psql_real () {
echo "Pinging psql in container $1 with db name $2"
docker exec -u postgres oodi_db psql -c "CREATE DATABASE tkt_oodi_real" || echo "tkt_oodi_real DB already exists"
retry docker exec -u postgres $1 pg_isready
retry docker exec -u postgres $1 pg_isready --dbname=$2
docker exec -u postgres $1 psql -c "CREATE DATABASE $2" || echo "container $1 DB $2 already exists"
}
db_setup_full () {
echo "Getting backups from the Oodikone server, this will prompt you for your password. "
get_oodikone_server_backup
echo "Unpacking compressed files"
unpack_oodikone_server_backup
echo "Restoring PostgreSQL from backup"
ping_psql_real "oodi_db" "tkt_oodi_real"
retry restore_real_psql_from_backup
# echo "Restoring MongoDB from backup"
# retry restore_mongodb_from_backup
@@ -120,12 +93,9 @@ db_setup_full () {
}
db_anon_setup_full () {
echo "Getting anon backups from the private repository. "
get_anon_oodikone
echo "Unpacking compressed files"
unpack_oodikone_server_backup
echo "Restoring PostgreSQL from backup"
ping_psql "oodi_db" "tkt_oodi"
ping_psql "oodi_db" "tkt_oodi_test"
retry restore_psql_from_backup
# echo "Restoring MongoDB from backup"
# retry restore_mongodb_from_backup
@@ -135,6 +105,30 @@ db_anon_setup_full () {
echo "Database setup finished"
}
reset_real_db () {
docker-compose down
docker-compose up -d db user_db
ping_psql "oodi_db" "tkt_oodi_real"
docker exec -u postgres oodi_db dropdb "tkt_oodi_real"
ping_psql "oodi_user_db" "user_db_real"
docker exec -u postgres oodi_user_db dropdb "user_db_real"
db_setup_full
docker-compose down
}
reset_db () {
docker-compose down
docker-compose up -d db user_db
ping_psql "oodi_db" "tkt_oodi"
docker exec -u postgres oodi_db dropdb "tkt_oodi"
ping_psql "oodi_db" "tkt_oodi_test"
docker exec -u postgres oodi_db dropdb "tkt_oodi_test"
ping_psql "oodi_user_db" "user_db"
docker exec -u postgres oodi_user_db dropdb "user_db"
db_anon_setup_full
docker-compose down
}
install_cli_npm_packages () {
npm ci
}
@@ -147,35 +141,38 @@ show_instructions () {
cat ./assets/instructions.txt
}
docker_restart_backend () {
docker-compose restart backend userservice
}
run_full_setup () {
echo "Setup npm packages"
install_cli_npm_packages
echo "Init dirs"
init_dirs
echo "Building images, starting containers"
docker_build
echo "Setup oodikone db from dump, this will prompt you for your password."
echo "Getting backups from the Oodikone server, this will prompt you for your password. "
get_oodikone_server_backup
echo "Getting anon backups from the private repository. "
get_anon_oodikone
echo "Building images"
docker-compose build
echo "Setup oodikone db from dump."
docker-compose up -d db user_db
db_setup_full
db_anon_setup_full
echo "Restarting Docker backend containers to run migrations, etc."
docker_restart_backend
docker-compose down
show_instructions
}
run_anon_full_setup () {
echo "Setup npm packages"
install_cli_npm_packages
echo "Init dirs"
init_dirs
echo "Building images, starting containers"
docker_build
echo "Setup oodikone db from dump, this will prompt you for your password."
echo "Getting anon backups from the private repository. "
get_anon_oodikone
echo "Building images"
docker-compose build
echo "Setup oodikone db from dump."
docker-compose up -d db user_db
db_anon_setup_full
echo "Restarting Docker backend containers to run migrations, etc."
docker_restart_backend
docker-compose down
show_instructions
}
@@ -184,10 +181,13 @@ run_e2e_setup () {
install_cli_npm_packages
echo "Init dirs"
init_dirs
echo "Building images, starting containers"
docker-compose -f $1 build && docker-compose -f $1 up -d
echo "Setup oodikone db from dump, this will prompt you for your password."
echo "Getting anon backups from the private repository. "
get_anon_oodikone
echo "Building images"
docker-compose -f $1 build
echo "Setup oodikone db from dump."
docker-compose -f $1 up -d db user_db
db_anon_setup_full
echo "Restarting Docker backend containers to run migrations, etc."
docker-compose -f $1 restart backend userservice
echo "Starting services."
docker-compose -f $1 up -d
}
+5
View File
@@ -0,0 +1,5 @@
**/node_modules
updater_writer/**/models
updater_writer/**/migrations
oodikone2-backend/**/models
oodikone2-backend/**/migrations
@@ -13,3 +13,6 @@ npm-debug.log
studentnumbers.txt
studentnumbers*.txt
src/anonymized_API
models
migrations
@@ -0,0 +1,22 @@
FROM node:10.15-alpine
COPY ./oodikone2-backend /usr/src/app
COPY ./shared/models /usr/src/app/src/models
COPY ./shared/migrations /usr/src/app/src/database/migrations
COPY ./shared/migrations_kone /usr/src/app/src/database/migrations_kone
WORKDIR /usr/src/app
RUN npm ci
COPY ./oodikone2-backend/package.json /usr/src/cache/package.json
COPY ./oodikone2-backend/package-lock.json /usr/src/cache/package-lock.json
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
RUN if [ "${NODE_ENV}" != "production" ]; then cp -r /usr/src/app/node_modules /usr/src/cache/node_modules; fi
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.5.0/wait /wait
RUN chmod +x /wait
EXPOSE 8080
CMD /wait && npm start
@@ -1,9 +1,4 @@
# oodikone2-backend
Master:
[![Build Status](https://travis-ci.org/UniversityOfHelsinkiCS/oodikone2-backend.svg?branch=master)](https://travis-ci.org/UniversityOfHelsinkiCS/oodikone2-backend)
Trunk:
[![Build Status](https://travis-ci.org/UniversityOfHelsinkiCS/oodikone2-backend.svg?branch=trunk)](https://travis-ci.org/UniversityOfHelsinkiCS/oodikone2-backend)
## Dev
@@ -69,34 +64,6 @@ Fill database with data from test.bak dump file:
`cat test.bak | docker exec -i oodi_db psql -U postgres -d tkt_oodi_test`
Install node
https://nodejs.org/en/download/
Clone the repository and install the packages in the root of the project:
```
git clone git@github.com:UniversityOfHelsinkiCS/oodikone2-backend.git`
cd oodikone2-backend
npm install
```
Create .env file containing
```
DB_URL=postgres://postgres@localhost:5421/tkt_oodi
TEST_DB=postgres://postgres@localhost:5421/tkt_oodi_test
FRONT_URL=http://localhost:8000
REDIS=localhost
TOKEN_SECRET=IWannaBeTheVeryBest
```
To initiate and seed the redis db, run:
`npm run init_redis`
and
`npm run seed_redis`
### Running
#### Dev
@@ -111,7 +78,7 @@ Run `npm test`
Always deploy first to staging!
When merging from trunk to master Travis builds a docker image for staging and pushes it automatically.
When merging from trunk to master Travis builds a docker image for staging and pushes it automatically to dockerh-hub. Currently **staging** is also automatically deployed after the image is pushed.
When a release (or tag) is created in master branch Travis builds a docker image for production and pushes it automatically.
@@ -188,7 +155,7 @@ To update your database run `docker-compose run -d CONTAINER_NAME npm run update
### Anonymized data & E2E environment
Use [oodikone2-cli](https://github.com/UniversityOfHelsinkiCS/oodikone2-cli) to setup you're environments.
Use [oodikone-cli](https://github.com/UniversityOfHelsinkiCS/oodikone) to setup you're environments.
Before running cli make yourself a deployment key for Anonyymioodi private repository and put it in your cli folder as `private.key`. This allows you to download the anonymized dumps from the repository.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because it is too large Load Diff
@@ -38,7 +38,7 @@
"author": "Matti Luukkainen",
"license": "MIT",
"dependencies": {
"axios": "^0.18.0",
"axios": "^0.19.0",
"bluebird": "^3.5.3",
"body-parser": "^1.18.3",
"cors": "^2.8.5",
@@ -50,6 +50,7 @@
"mkdirp": "^0.5.1",
"moment": "^2.22.2",
"morgan": "^1.9.1",
"node-nats-streaming": "^0.2.2",
"nodemailer": "^4.7.0",
"pg": "^7.7.1",
"raven": "^2.6.3",
@@ -0,0 +1,16 @@
const { seedAllMigrations } = require('../src/database/seed_migrations')
const { forceSyncDatabase } = require('../src/database/connection')
const sync = async () => {
try {
await forceSyncDatabase()
await seedAllMigrations()
console.log('Force sync succeeded. ')
process.exit(0)
} catch (e) {
console.log(`Force sync failed: ${e}`)
process.exit(1)
}
}
sync()
@@ -1,8 +1,8 @@
const { seedMigrations } = require('../src/database/seed_migrations')
const { seedAllMigrations } = require('../src/database/seed_migrations')
const run = async () => {
try {
await seedMigrations()
await seedAllMigrations()
process.exit(0)
} catch (e) {
console.log(`Seeding migrations failed: ${e}`)
@@ -4,9 +4,12 @@ const bodyParser = require('body-parser')
const Raven = require('raven')
const conf = require('./conf-backend')
const routes = require('./routes')
const { StartNats } = require('./events')
const { PORT } = conf
const app = express()
StartNats()
Raven.config(process.env.SENTRY_ADDR, { captureUnhandledRejections: true }).install()
app.use(cors({ credentials: true, origin: conf.frontend_addr }))
@@ -2,7 +2,8 @@ require('dotenv').config()
const { NODE_ENV } = process.env
let DB_URL = process.env.DB_URL
if (NODE_ENV === 'test') {
const isTest = process.env.NODE_ENV === 'test'
if (isTest) {
DB_URL = process.env.TEST_DB
}
else if (NODE_ENV === 'anon') {
@@ -12,13 +13,14 @@ const frontend_addr = process.env.FRONT_URL
const redis = process.env.REDIS
const TOKEN_SECRET = process.env.TOKEN_SECRET
const DB_SCHEMA = process.env.DB_SCHEMA || 'public'
const DB_SCHEMA_KONE = process.env.DB_SCHEMA_KONE || 'kone_data'
const CERT_PATH = process.env.CERT_PATH // production/staging only
const KEY_PATH = process.env.KEY_PATH // production/staging only
const OODILEARN_URL = process.env.OODILEARN_URL
const USERSERVICE_URL = process.env.USERSERVICE_URL
const USAGESERVICE_URL = process.env.USAGESERVICE_URL
const ANALYTICS_URL = process.env.ANALYTICS_URL
const PORT = process.env.NODE_ENV === 'test' ? 8079 : 8080
const PORT = isTest ? 8079 : 8080
const OODI_SECRET = process.env.OODI_SECRET
const FEATURES = {
@@ -51,14 +53,15 @@ let requiredGroup = 'grp-oodikone-users'
if (process.env.NODE_ENV === 'staging') {
requiredGroup = 'grp-oodikone-staging-users'
}
if (process.env.NODE_ENV === 'dev' || process.env.NODE_ENV === 'test') {
if (process.env.NODE_ENV === 'dev' || isTest) {
requiredGroup = null
}
module.exports = {
frontend_addr, DB_URL, redis, TOKEN_SECRET, DB_SCHEMA, OODI_ADDR, CERT_PATH, KEY_PATH, FEATURES, OODILEARN_URL,
frontend_addr, DB_URL, redis, TOKEN_SECRET, DB_SCHEMA, DB_SCHEMA_KONE, OODI_ADDR, CERT_PATH, KEY_PATH, FEATURES, OODILEARN_URL,
USERSERVICE_URL: formatURL(USERSERVICE_URL), ACCESS_TOKEN_HEADER_KEY, PORT,
ANALYTICS_URL: formatURL(ANALYTICS_URL),
USAGESERVICE_URL,
requiredGroup, OODI_SECRET, OODI_SECRET_HEADER_KEY
requiredGroup, OODI_SECRET, OODI_SECRET_HEADER_KEY,
isTest
}
@@ -0,0 +1,99 @@
const Sequelize = require('sequelize')
const Umzug = require('umzug')
const conf = require('../conf-backend')
const sequelize = new Sequelize(conf.DB_URL, {
schema: conf.DB_SCHEMA,
searchPath: conf.DB_SCHEMA,
logging: false,
operatorsAliases: false
})
sequelize.query(`SET SESSION search_path to ${conf.DB_SCHEMA}`)
const sequelizeKone = new Sequelize(conf.DB_URL, {
schema: conf.DB_SCHEMA_KONE,
searchPath: conf.DB_SCHEMA_KONE,
logging: false,
operatorsAliases: false
})
sequelizeKone.query(`SET SESSION search_path to ${conf.DB_SCHEMA_KONE}`)
// See https://github.com/sequelize/sequelize/issues/10875
const runMigrations = async () => {
try {
const migrator = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: sequelize,
tableName: 'migrations'
},
logging: console.log,
migrations: {
params: [
sequelize.getQueryInterface(),
Sequelize
],
path: `${process.cwd()}/src/database/migrations`,
pattern: /\.js$/,
schema: conf.DB_SCHEMA
}
})
const migrations = await migrator.up()
console.log('Migrations up to date', migrations)
} catch (e) {
console.log('Migration error, message:', e)
}
}
const runMigrationsKone = async () => {
try {
const migrator = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: sequelizeKone,
tableName: 'migrations',
schema: conf.DB_SCHEMA_KONE
},
logging: console.log,
migrations: {
params: [
sequelizeKone.getQueryInterface(),
Sequelize
],
path: `${process.cwd()}/src/database/migrations_kone`,
pattern: /\.js$/,
schema: conf.DB_SCHEMA_KONE
},
})
const migrations = await migrator.up()
console.log('Kone Migrations up to date', migrations)
} catch (e) {
console.log('Kone Migration error, message:', e)
}
}
const migrationPromise = !conf.isTest ? runMigrations().then(() => runMigrationsKone()) : Promise.resolve()
const forceSyncDatabase = async () => {
try {
await sequelize.getQueryInterface().createSchema(conf.DB_SCHEMA)
} catch (e) {
// console.log(e)
}
try {
await sequelizeKone.getQueryInterface().createSchema(conf.DB_SCHEMA_KONE)
} catch (e) {
// console.log(e)
}
await sequelize.sync({ force: true })
await sequelizeKone.sync({ force: true })
}
module.exports = {
sequelize,
sequelizeKone,
migrationPromise,
forceSyncDatabase
}
@@ -0,0 +1,27 @@
const fs = require('fs')
const { Migration, MigrationKone } = require('../models/index')
const DEFAULT_PATH = `${process.cwd()}/src/database/migrations`
const DEFAULT_PATH_KONE = `${process.cwd()}/src/database/migrations_kone`
const saveMigrationsToDatabase = Migration => async filenames =>
Promise.all(filenames.map(name => Migration.upsert({ name })))
const seedMigrations = async (migrationfilepath=DEFAULT_PATH) => {
const filenames = fs.readdirSync(migrationfilepath)
await saveMigrationsToDatabase(Migration)(filenames)
}
const seedMigrationsKone = async (migrationfilepath=DEFAULT_PATH_KONE) => {
const filenames = fs.readdirSync(migrationfilepath)
await saveMigrationsToDatabase(MigrationKone)(filenames)
}
const seedAllMigrations = async () => {
await seedMigrations()
await seedMigrationsKone()
}
module.exports = {
seedAllMigrations
}
@@ -0,0 +1,117 @@
var stan = require('node-nats-streaming').connect(
'updaterNATS',
process.env.HOSTNAME,
process.env.NATS_URI
)
const { refreshAssociationsInRedis } = require('./services/studyrights')
const { getAllProgrammes } = require('./services/studyrights')
const { productivityStatsForStudytrack, throughputStatsForStudytrack } = require('./services/studytrack')
const { setProductivity, setThroughput, patchProductivity, patchThroughput } = require('./services/analyticsService')
const taskStatuses = { }
const handleMessage = (asyncHandlerFunction) => async (msg) => {
const key = msg.getSubject()+'_'+msg.getData()
if (taskStatuses[key])
return
stan.publish('status', key+':RECEIVED', (err) => {
if(err) {
console.log('publish failed', err)
}
})
taskStatuses[key] = true
const success = await asyncHandlerFunction(msg)
taskStatuses[key] = false
stan.publish('status', key+(success ? ':DONE' : ':ERRORED'), (err) => {
if(err) {
console.log('publish failed', err)
}
})
msg.ack()
}
const StartNats = () => {
console.log(`STARTING WITH ${process.env.HOSTNAME} as id`)
var opts = stan.subscriptionOptions()
opts.setManualAckMode(true)
// opts.setAckWait(6*60*60*1000)
// opts.setDeliverAllAvailable()
// opts.setDurableName('durable')
opts.setMaxInFlight(1)
stan.on('connect', async function() {
stan.subscribe('RefreshStudyrightAssociations', opts).on('message', handleMessage(async () => {
try {
await refreshAssociationsInRedis()
} catch (e) {
console.error(e)
return false
}
return true
}))
stan.subscribe('RefreshOverview', opts).on('message', handleMessage(async () => {
try {
console.log('RefreshOverview starting')
const codes = (await getAllProgrammes()).map(p => p.code)
let ready = 0
for(const code of codes) {
try {
await patchThroughput({ [code]: { status: 'RECALCULATING' } })
const since = new Date().getFullYear() - 5
const data = await throughputStatsForStudytrack(
code,
since
)
await setThroughput(
data
)
} catch (e) {
try {
await patchThroughput({ [code]: { status: 'RECALCULATION ERRORED' } })
} catch (e) {
console.error(
e
)
}
console.log(
`Failed to update throughput stats for code: ${code}, reason: ${
e.message
}`
)
}
try {
await patchProductivity({ [code]: { status: 'RECALCULATING' } })
const since = '2017-08-01'
const data = await productivityStatsForStudytrack(code, since)
await setProductivity(data)
} catch (e) {
try {
await patchProductivity({
[code]: { status: 'RECALCULATION ERRORED' }
})
} catch (e) {
console.error(e)
}
console.log(`Failed to update productivity stats for code: ${code}, reason: ${e.message}`)
}
ready += 1
console.log(
`RefreshOverview ${ready}/${
codes.length
} done`
)
}
} catch (e) {
console.error(e)
return false
}
return true
}))
})
return stan
}
module.exports = {
StartNats
}
@@ -4,6 +4,7 @@ const courses = require('./routes/courses')
const students = require('./routes/students')
const population = require('./routes/population')
const login = require('./routes/login')
const superlogin = require('./routes/superlogin')
const language = require('./routes/language')
const users = require('./routes/users')
const elementdetails = require('./routes/elementdetails')
@@ -11,32 +12,41 @@ const auth = require('./middleware/auth')
const teachers = require('./routes/teachers')
const usage = require('./routes/usage')
const providers = require('./routes/providers')
const faculties = require('./routes/faculties')
const semesters = require('./routes/semesters')
const oodilearn = require('./routes/oodilearn')
const courseGroups = require('./routes/courseGroups')
const mandatoryCourses = require('./routes/mandatorycourses')
const mandatoryCourseLabels = require('./routes/mandatorycourselabels')
const ping = require('./routes/ping')
const oodi = require('./routes/oodi')
const task = require('./routes/tasks')
const feedback = require('./routes/feedback')
const tags = require('./routes/tags')
module.exports = (app, url) => {
app.use(url, log)
app.use(url, login)
app.use(url, ping)
app.use(auth.checkAuth, auth.checkRequiredGroup, auth.checkUserBlacklisting, accessLogger)
app.use(`${url}/superlogin`, auth.roles(['admin']), superlogin)
app.use(url, elementdetails)
app.use(url, courses)
app.use(url, students)
app.use(url, population)
app.use(url, language)
app.use(url, providers)
app.use(url, faculties)
app.use(url, semesters)
app.use(`${url}/teachers`, auth.roles(['teachers']), teachers)
app.use(`${url}/users`, auth.roles(['users']), users)
app.use(`${url}/feedback`, feedback)
app.use(`${url}/usage`, auth.roles(['usage']), usage)
app.use(`${url}/oodilearn`, auth.roles(['oodilearn']), oodilearn)
app.use(`${url}/course-groups`, auth.roles(['coursegroups']), courseGroups)
app.use(`${url}/mandatory_courses`, mandatoryCourses),
app.use(`${url}/mandatory-course-labels`, mandatoryCourseLabels),
app.use(`${url}/oodi`, auth.roles(['dev']), oodi)
app.use(url, auth.roles(['dev', 'admin']), task)
app.use(url, tags)
}
@@ -21,7 +21,7 @@ router.get('/v2/studyprogrammes/:id/mandatory_courses', async (req, res) => {
const codes = await MandatoryCourses.byStudyprogramme(req.params.id)
res.json(codes)
} else {
res.status(422)
res.status(422).end()
}
})
@@ -30,7 +30,7 @@ router.get('/v2/studyprogrammes/ping', async (req, res) => {
const result = await ping()
res.json(result)
} catch (e) {
res.status(500)
res.status(500).end()
}
})
@@ -46,15 +46,15 @@ router.get('/v2/studyprogrammes/:id/productivity', async (req, res) => {
if (!data) {
try {
const since = '2017-08-01'
data = await productivityStatsForStudytrack(code, since)
setProductivity(data)
const stats = await productivityStatsForStudytrack(code, since)
data = await setProductivity(stats)
} catch (e) {
console.error(e)
}
}
return res.json({ ...data })
return res.json(data)
} else {
res.status(422)
res.status(422).end()
}
})
@@ -110,15 +110,15 @@ router.get('/v2/studyprogrammes/:id/throughput', async (req, res) => {
if (!data) {
try {
const since = req.params.since ? req.params.since : new Date().getFullYear() - 5
data = await throughputStatsForStudytrack(req.params.id, since)
setThroughput(data)
const result = await throughputStatsForStudytrack(req.params.id, since)
data = await setThroughput(result)
} catch (e) {
console.error(e)
}
}
return res.json({ ...data, thesis: await thesisPromise })
} else {
res.status(422)
res.status(422).end()
}
})
@@ -128,10 +128,8 @@ router.get('/v2/studyprogrammes/throughput/recalculate', async (req, res) => {
console.log('Throughput stats recalculation starting')
const codes = code ? [code] : (await getAllProgrammes()).map(p => p.code)
try {
await patchThroughput(codes.reduce((acc, c) => {
acc[c] = { status: 'RECALCULATING' }
return acc
}, {}))
const data = codes.reduce((acc, id) => ({ ...acc, [id]: { status: 'RECALCULATING' }}), {})
await patchThroughput(data)
res.status(200).end()
} catch (e) {
console.error(e)
@@ -146,9 +144,7 @@ router.get('/v2/studyprogrammes/throughput/recalculate', async (req, res) => {
await setThroughput(data)
} catch (e) {
try {
await patchThroughput({
[code]: { status: 'RECALCULATION ERRORED' }
})
await patchThroughput({ [code]: { status: 'RECALCULATION ERRORED' }})
} catch (e) {
console.error(e)
return
@@ -166,7 +162,7 @@ router.get('/v2/studyprogrammes/:id/thesis', async (req, res) => {
const thesis = await findProgrammeTheses(id)
res.json(thesis)
} else {
res.status(422)
res.status(422).end()
}
})
@@ -177,7 +173,7 @@ router.post('/v2/studyprogrammes/:id/thesis', async (req, res) => {
const thesis = await createThesisCourse(id, course, thesisType)
res.status(201).json(thesis)
} else {
res.status(422)
res.status(422).end()
}
})
@@ -187,8 +183,8 @@ router.delete('/v2/studyprogrammes/:id/thesis/:course', async (req, res) => {
const deleted = await deleteThesisCourse(id, course)
res.status(204).json(deleted)
} else {
res.status(422)
res.status(422).end()
}
})
module.exports = router
module.exports = router
@@ -0,0 +1,9 @@
const router = require('express').Router()
const { all } = require('../services/organisations')
router.get('/faculties', async (req, res) => {
const faculties = await all()
res.json(faculties)
})
module.exports = router
@@ -0,0 +1,26 @@
const router = require('express').Router()
const mailservice = require('../services/mailservice')
const userService = require('../services/userService')
router.post('/email', async (req, res) => {
const { content } = req.body
const { uid } = req.headers
const { email, full_name } = await userService.byUsername(uid)
const formattedEmail = content.split('\n\n').map(line => `<p> ${line} </p>`).join('')
const feedback = mailservice.feedback(formattedEmail, uid, email, full_name)
if (process.env.SMTP !== undefined && content) {
await mailservice.transporter.sendMail(feedback, (error) => {
if (error) {
console.log('Error occured')
res.status(400).json(error).end()
} else {
console.log('Message sent succesfully!')
res.status(200).json('success').end()
}
mailservice.transporter.close()
})
}
})
module.exports = router
@@ -27,7 +27,7 @@ router.post('/login', async (req, res) => {
const mail = req.headers.mail || ''
const hyGroups = parseHyGroups(req.headers['hygroupcn'])
const affiliations = parseHyGroups(req.headers['edupersonaffiliation'])
console.log(uid, 'trying to login, referring to userservice.')
let { token, isNew } = await userService.login(uid, full_name, hyGroups, affiliations, mail)
isNew && sendEmail(uid)
@@ -44,26 +44,6 @@ router.post('/login', async (req, res) => {
}
})
router.post('/superlogin/:uid', async (req, res) => {
try {
const asUser = req.params.uid
const uid = req.headers['uid']
if (req.headers['shib-session-id'] && uid) {
console.log('super')
const token = await userService.superlogin(uid, asUser)
res.status(200).json({ token })
} else {
res.status(401).json({
message: `Not enough headers login, uid:
${req.headers.uid} session-id ${req.headers['shib-session-id']}`
}).end()
}
} catch (err) {
console.log(err)
res.status(401).json({ message: 'problem with login', err })
}
})
router.delete('/logout', async (req, res) => {
try {
const logoutUrl = req.headers.shib_logout_url
@@ -0,0 +1,70 @@
const router = require('express').Router()
const MandatoryCourseLabels = require('../services/mandatoryCourseLabels')
router.get('/:programme/labels', async (req, res) => {
const { programme } = req.params
if (programme) {
try {
const labels = await MandatoryCourseLabels.labelsByStudyprogramme(programme)
res.status(200).json(labels)
} catch (err) {
console.error(err)
res.status(400).json(err.message)
}
} else {
res.status(422).end()
}
})
router.delete('/:programme/labels', async (req, res) => {
const { programme } = req.params
const { label } = req.body
if (programme && label) {
try {
await MandatoryCourseLabels.destroy(programme, label)
const labels = await MandatoryCourseLabels.labelsByStudyprogramme(programme)
res.status(200).json(labels)
} catch (err) {
console.error(err)
res.status(400).json(err.message)
}
} else {
res.status(422).end()
}
})
router.post('/:programme/move', async (req, res) => {
const { programme } = req.params
const { label, direction } = req.body
if (programme && label) {
try {
await MandatoryCourseLabels.move(programme, label, direction)
const labels = await MandatoryCourseLabels.labelsByStudyprogramme(programme)
res.status(200).json(labels)
} catch (err) {
console.error(err)
res.status(400).json(err.message)
}
} else {
res.status(422).end()
}
})
router.post('/:programme/labels', async (req, res) => {
const { programme } = req.params
const { label } = req.body
if (programme && label) {
try {
await MandatoryCourseLabels.create(programme, label)
const labels = await MandatoryCourseLabels.labelsByStudyprogramme(programme)
res.status(200).json(labels)
} catch (err) {
console.error(err)
res.status(400).json(err.message)
}
} else {
res.status(422).end()
}
})
module.exports = router
@@ -0,0 +1,60 @@
const router = require('express').Router()
const MandatoryCourses = require('../services/mandatoryCourses')
router.delete('/:programme', async (req, res) => {
const { programme } = req.params
const { course } = req.body
if (programme && course) {
try {
await MandatoryCourses.remove(programme, course)
res.status(200).json(course)
} catch (err) {
console.error(err)
res.status(400).json(err.message)
}
} else {
res.status(422).end()
}
})
router.post('/:programme', async (req, res) => {
const { programme } = req.params
const { course } = req.body
if (programme && course) {
try {
await MandatoryCourses.create(programme, course)
const newCourse = await MandatoryCourses.find(programme, course)
res.status(201).json({ name: newCourse.course.name, code: newCourse.course_code, label: newCourse.label })
} catch (err) {
console.error(err)
res.status(400).json(err.message)
}
} else {
res.status(422).end()
}
})
router.post('/:programme/label/:course', async (req, res) => {
const { programme, course } = req.params
const { label } = req.body
if (programme && course) {
try {
await MandatoryCourses.updateLabel(programme, course, label)
const updatedCourse = await MandatoryCourses.find(programme, course)
res
.status(200)
.json({
name: updatedCourse.course.name,
code: updatedCourse.course_code,
label: updatedCourse.mandatory_course_label
})
} catch (err) {
console.error(err)
res.status(400).json(err.message)
}
} else {
res.status(422).end()
}
})
module.exports = router
@@ -5,7 +5,7 @@ const { updateStudents } = require('../services/doo_api_database_updater/databas
const StudyrightService = require('../services/studyrights')
// POST instead of GET because of too long params and "sensitive" data
router.post('/v2/populationstatistics/courses', async (req, res) => {
router.post('/v2/populationstatistics/courses', async (req, res) => {
try {
if (!req.body.year || !req.body.semesters || !req.body.studyRights) {
res.status(400).json({ error: 'The body should have a year, semester and study rights defined' })
@@ -32,34 +32,36 @@ router.post('/v2/populationstatistics/courses', async (req, res) => {
})
router.get('/v3/populationstatistics', async (req, res) => {
console.log(req.query.year, req.query.semesters, req.query.studyRights)
const { year, semesters, studyRights: studyRightsJSON } = req.query
try {
if (!req.query.year || !req.query.semesters || !req.query.studyRights) {
res.status(400).json({ error: 'The query should have a year, semester and study rights defined' })
if (!year || !semesters || !studyRightsJSON) {
res.status(400).json({ error: 'The query should have a year, semester and studyRights defined' })
return
}
if (!Array.isArray(req.query.studyRights)) { // studyRights should always be an array
req.query.studyRights = [req.query.studyRights]
}
req.query.studyRights = req.query.studyRights.filter(sr => sr !== 'undefined')
const roles = req.decodedToken.roles
if (!roles || !roles.map(r => r.group_code).includes('admin')) {
const elements = new Set(req.decodedToken.rights)
if (req.query.studyRights.some(code => !elements.has(code))) {
res.status(403).json([])
return
let studyRights = null
try {
studyRights = JSON.parse(studyRightsJSON)
const { roles, rights } = req.decodedToken
if (!roles || !roles.map(r => r.group_code).includes('admin')) {
if (!rights.includes(studyRights.programme)) {
res.status(403).json([])
return
}
}
} catch (e) {
console.error(e)
res.status(400).json({ error: 'The query had invalid studyRights' })
return
}
if (req.query.months == null) {
req.query.months = 12
}
const result = await Population.optimizedStatisticsOf(req.query)
const result = await Population.optimizedStatisticsOf({ ...req.query, studyRights })
if (result.error) {
console.log(result.error)
res.status(400)
res.status(400).end()
return
}
@@ -0,0 +1,24 @@
const router = require('express').Router()
const userService = require('../services/userService')
router.post('/:uid', async (req, res) => {
try {
const asUser = req.params.uid
const uid = req.decodedToken.mockedBy == null ? req.headers['uid'] : req.decodedToken.mockedBy
if (req.headers['shib-session-id'] && uid) {
console.log('super')
const token = await userService.superlogin(uid, asUser)
res.status(200).json({ token })
} else {
res.status(401).json({
message: `Not enough headers login, uid:
${req.headers.uid} session-id ${req.headers['shib-session-id']}`
}).end()
}
} catch (err) {
console.log(err.message)
res.status(401).json({ message: 'problem with login', err: err.message })
}
})
module.exports = router
@@ -0,0 +1,104 @@
const router = require('express').Router()
const Tags = require('../services/tags')
const TagStudent = require('../services/tagstudent')
router.get('/tags', async (req, res) => {
try {
const tags = await Tags.findTags()
res.status(200).json(tags)
} catch (err) {
console.log(err)
res.status(400).json(err)
}
})
router.get('/tags/:studytrack', async (req, res) => {
const { studytrack } = req.params
try {
const tags = await Tags.findTagsByStudytrack(studytrack)
res.status(200).json(tags)
} catch (err) {
console.log(err)
res.status(400).json(err)
}
})
router.post('/tags', async (req, res) => {
const { tag } = req.body
try {
const result = await Tags.createNewTag(tag)
res.status(200).json(result)
} catch (err) {
console.log(err)
res.status(400).json(err.message)
}
})
router.delete('/tags', async (req, res) => {
const { tag } = req.body
try {
const result = await Tags.deleteTag(tag)
res.status(200).json(result)
} catch (err) {
console.log(err)
res.status(400).json(err)
}
})
router.get('/studenttags', async (req, res) => {
try {
const result = await TagStudent.getStudentTags()
res.status(200).json(result)
} catch (err) {
console.log(err)
res.status(400).json(err)
}
})
router.get('/studenttags/:studytrack', async (req, res) => {
const { studytrack } = req.params
try {
const result = await TagStudent.getStudentTagsByStudytrack(studytrack)
res.status(200).json(result)
} catch (err) {
console.log(err)
res.status(400).json(err)
}
})
router.get('/studenttags/:studentnumber', async (req, res) => {
const { studentnumber } = req.params
try {
const result = await TagStudent.getStudentTagsByStudentnumber(studentnumber)
console.log(result)
res.status(200).json(result)
} catch (err) {
console.log(err)
res.status(400).json(err)
}
})
router.post('/studenttags', async (req, res) => {
const { tag } = req.body
try {
const result = await TagStudent.createStudentTag(tag)
res.status(200).json(result)
} catch (err) {
console.log(err)
res.status(400).json(err)
}
})
router.delete('/studenttags', async (req, res) => {
const { id } = req.body
try {
const result = await TagStudent.deleteStudentTag(id)
res.status(200).json(result)
} catch (err) {
console.log(err)
res.status(400).json(err)
}
})
module.exports = router
@@ -20,6 +20,12 @@ router.get('/top', async (req, res) => {
res.json(result)
})
router.post('/top', async (req, res) => {
const { startyearcode, endyearcode } = req.body
res.status(200).end()
await topteachers.findAndSaveTeachers(startyearcode, endyearcode)
})
router.get('/top/categories', async (req, res) => {
const result = await topteachers.getCategoriesAndYears()
res.json(result)
@@ -63,4 +63,12 @@ router.delete('/:uid/elements', async (req, res) => {
res.json(user)
})
router.post('/:uid/faculties', async (req, res) => {
const { uid } = req.params
const { faculties } = req.body
const user = await userService.setFaculties(uid, faculties)
if (user && user.username != req.decodedToken.userId) await blacklist.addUserToBlacklist(user.username)
res.json(user)
})
module.exports = router
@@ -327,7 +327,7 @@ const yearlyStatsOf = async (code, year, separate, language) => {
}, resultProgrammes)
const alternatives = await getDuplicateCodes(code)
const codes = alternatives ? [code, ...Object.keys(alternatives.alt)] : [code]
const codes = alternatives ? alternatives : [code]
const allInstances = await creditsOf(codes)
const yearInst = allInstances
.filter(inst => moment(new Date(inst.date)).isBetween(year.start + '-09-01', year.end + '-08-01'))
@@ -403,11 +403,22 @@ const getMainCodes = () => {
}
const deleteDuplicateCode = async (code) => {
await CourseDuplicates.destroy({
where: {
coursecode: code
}
})
try {
await CourseDuplicates.destroy({
where: {
coursecode: code
}
})
await sequelize.query(
`DELETE FROM course_duplicates
WHERE groupid in ( SELECT groupid FROM course_duplicates
group by groupid
having count(*) = 1)`,
{ type: sequelize.QueryTypes.BULKDELETE }
)
} catch (e) {
console.error(e)
}
}
const getDuplicateCodesWithCourses = () => {
@@ -558,7 +569,7 @@ const getAllDisciplines = () => Discipline.findAll()
const alternativeCodes = async code => {
const alternatives = await getDuplicateCodes(code)
return alternatives ? [code, ...Object.keys(alternatives.alt)] : [code]
return alternatives ? alternatives : [code]
}
const formatStudyrightElement = ({ code, element_detail }) => ({

Some files were not shown because too many files have changed in this diff Show More