Repository files navigation

Application: clinwiki

This application allows you to rate clinical trials. You can retrieve trials to rank by searching for NCT ID or MeSH Term

Installation / Running

You are encouraged to use rvm for Ruby version and gemset management. Once RVM is installed, switch to the correct Ruby and gemset as follows:

rvm use ruby-2.5.3@clinwiki --install --create

Then, from the project root directory:

bundle install
bundle exec rake db:create
bundle exec rake db:migrate

Once the dependencies are installed and the database is initialized, you can run the server with:

bundle exec rails s

Note that we are using dotenv to make the handling of database variables easier.

Environment Variables

We use a handful of environment variables to run the server. You can expose these when running locally by creating a .env file in the project root level directory. Here's an example:

# needed to connect to aact
AACT_DATABASE_URL=postgres://aact:aact@aact-db.ctti-clinicaltrials.org:5432/aact
REDIS_URL=redis://127.0.0.1:6379/0
DATABASE_URL=postgres://postgres@localhost:5432/clinwiki
#Optional
JWT_EXPIRATION_TIME_SECS=86400 # JWT expiration time

NOTE: The use of the DATABASE_URL environment variable should prevent the need for a database.yml file in when running the server in development mode.

Data Access

Databases

The AACT Clinical Trials Database provides data the data we use for clinical trials.

While the database is available online, you are encouraged to download a copy of the database for ease of access.

We maintain a separate postgres database for data related to users. Please refer to the Installation section for additional info.

If you don't have postgres installed locally, you can do so using homebrew:

brew install postgres

Elasticsearch

We use searchkick to enable search.

Follow the instructions in the searchkick docs for setting up Elasticsearch locally.

Indexing

Indexing is performed in the background by Sidekiq. You can run Sidekiq as follows:

bundle exec sidekiq -C config/sidekiq.yml

Note that with about 32 concurrent workers, it should take roughly 8 hours to fully reindex.

It's also worth noting that we run a background job every ten seconds to handle batch reindexing. This is important because it optimizes queries using ActiveRecord's includes functionality. Refer to the Study model's search_import scope for more details.

Scheduled jobs can be configured in ./config/schedule.yml.

To disable Auto indexing set env variables for sidekiq process:

AUTO_INDEX_LAST_DAYS=0

A full reindex can be performed by running:

bundle exec rake search:index

A development environments can bootstrap a subset of search results as follows:

bundle exec rake search:bootstrap_dev

Searching

Searching for studies is handled by Searchkick through the Studies model. Results are directly brokered through the Elasticsearch index, which brokers data from the annotation database along with the AACT database.

Running Imports

1) Generate your CSV

CSVs expect a header with the following format: nct_id,Type,Value,Action

We support Tag as a type, with Add or Remove as an action. For crowd values, there are two types of crowd values and both can use the 'Add' and 'Remove' options. For native fields that are crowd overwriteable, Add will add or overwrite a crowd definition for that field, and Remove will remove the crowd definition. For crowd values that produce custom facets, the "Type" in the csv ("label" value in the UI) will be the name of the facet. The "Value" in the csv ("description" in the UI) is the value(s) in the facet. For multiple values of the crowd facet, enter as multiple lines or separated on a single line by '|' (example Type = "Karnofsky Score Allowed", Value = "100|90|80|70")

2) Commit your CSV to the appropriate subfolder

The CSV should be exported to the imports/ within the root project folder.

You can commit the CSV with the following workflow, which assumes you have set up heroku's command line tools, and that the heroku remote points to the clinwiki-prod project:

git add imports
git commit -m 'Added import file'# you can write any comment you'd like
git push origin master # add to clinwiki-org/clinwiki
git push heroku master # add to heroku -- this should kick off a deploy

3) Run the CSV import Rake task

# if your file is in imports/foo.csv, $MY_FILE should be foo.csv
heroku run -a clinwiki-prod rake import:csv["$MY_FILE"]

Running Exports

heroku run -a clinwiki-prod rake export:front_matter_csv > my-front-matter.csv

Working with Vagrant

Make sure you have a copy of cw-app located as a sibling of the root project directory.

You can once you've installed vagrant, you can install the vagrant VM by running vagrant up from the project root directory.

You can access the vagrant instance via vagrant ssh.

The following scripts are available

ScriptFunction
./scripts/vagrant/serverruns the server through vagrant, serving the API at port 3000
./scripts/vagrant/workerruns the worker within the vagrant server
./scripts/vagrant/frontendruns a hot-reloading version of the frontend

Initializing Data

We have already enqueued several tasks for the worker to run while provisioning Vagrant, but you will need to make sure to run the worker for those jobs to be handled.

Running the Server

In one vagrant SSH session, you will want to run the following:

cd /clinwki
./scripts/server

This will expose localhost:3000 to API requests.

From another session, run the following:

cd /cw-app
yarn start

This will run a hot-reloading session of the cw-app frontend.

To make sure reindexing and the like are handled on save, make sure to run ./scripts/worker in a separate session as well.

Run locally in production mode

  1. Create a .env file in root with the following contents
AACT_DATABASE_URL=postgres://$AACT_USER:$AACT_PASS@aact-db.ctti-clinicaltrials.org:5432/aact
MAILGUN_API_KEY=""
MAILGUN_DOMAIN="localhost:3000"
CW_HOST="localhost:3000"
CLINWIKI_DOMAIN="localhost:3000"
SECRET_KEY_BASE="lkdfjgldgjkdflgjlkdfjgldfkjg"
  1. Precompile assets
export$(cat .env | xargs)&& RAILS_ENV=production rake assets:precompile
  1. Start server
export$(cat .env | xargs)&& RAILS_ENV=production rails s

About

Crowd-source tool to annotate, rank and generally enhance the clarity and accuracy of clinical trial information.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Application: clinwiki

This application allows you to rate clinical trials. You can retrieve trials to rank by searching for NCT ID or MeSH Term

Installation / Running

You are encouraged to use rvm for Ruby version and gemset management. Once RVM is installed, switch to the correct Ruby and gemset as follows:

rvm use ruby-2.5.3@clinwiki --install --create

Then, from the project root directory:

bundle install
bundle exec rake db:create
bundle exec rake db:migrate

Once the dependencies are installed and the database is initialized, you can run the server with:

bundle exec rails s

Note that we are using dotenv to make the handling of database variables easier.

Environment Variables

We use a handful of environment variables to run the server. You can expose these when running locally by creating a .env file in the project root level directory. Here's an example:

# needed to connect to aact
AACT_DATABASE_URL=postgres://aact:aact@aact-db.ctti-clinicaltrials.org:5432/aact
REDIS_URL=redis://127.0.0.1:6379/0
DATABASE_URL=postgres://postgres@localhost:5432/clinwiki
#Optional
JWT_EXPIRATION_TIME_SECS=86400 # JWT expiration time

NOTE: The use of the DATABASE_URL environment variable should prevent the need for a database.yml file in when running the server in development mode.

Data Access

Databases

The AACT Clinical Trials Database provides data the data we use for clinical trials.

While the database is available online, you are encouraged to download a copy of the database for ease of access.

We maintain a separate postgres database for data related to users. Please refer to the Installation section for additional info.

If you don't have postgres installed locally, you can do so using homebrew:

brew install postgres

Elasticsearch

We use searchkick to enable search.

Follow the instructions in the searchkick docs for setting up Elasticsearch locally.

Indexing

Indexing is performed in the background by Sidekiq. You can run Sidekiq as follows:

bundle exec sidekiq -C config/sidekiq.yml

Note that with about 32 concurrent workers, it should take roughly 8 hours to fully reindex.

It's also worth noting that we run a background job every ten seconds to handle batch reindexing. This is important because it optimizes queries using ActiveRecord's includes functionality. Refer to the Study model's search_import scope for more details.

Scheduled jobs can be configured in ./config/schedule.yml.

To disable Auto indexing set env variables for sidekiq process:

AUTO_INDEX_LAST_DAYS=0

A full reindex can be performed by running:

bundle exec rake search:index

A development environments can bootstrap a subset of search results as follows:

bundle exec rake search:bootstrap_dev

Searching

Searching for studies is handled by Searchkick through the Studies model. Results are directly brokered through the Elasticsearch index, which brokers data from the annotation database along with the AACT database.

Running Imports

1) Generate your CSV

CSVs expect a header with the following format: nct_id,Type,Value,Action

We support Tag as a type, with Add or Remove as an action. For crowd values, there are two types of crowd values and both can use the 'Add' and 'Remove' options. For native fields that are crowd overwriteable, Add will add or overwrite a crowd definition for that field, and Remove will remove the crowd definition. For crowd values that produce custom facets, the "Type" in the csv ("label" value in the UI) will be the name of the facet. The "Value" in the csv ("description" in the UI) is the value(s) in the facet. For multiple values of the crowd facet, enter as multiple lines or separated on a single line by '|' (example Type = "Karnofsky Score Allowed", Value = "100|90|80|70")

2) Commit your CSV to the appropriate subfolder

The CSV should be exported to the imports/ within the root project folder.

You can commit the CSV with the following workflow, which assumes you have set up heroku's command line tools, and that the heroku remote points to the clinwiki-prod project:

git add imports
git commit -m 'Added import file'# you can write any comment you'd like
git push origin master # add to clinwiki-org/clinwiki
git push heroku master # add to heroku -- this should kick off a deploy

3) Run the CSV import Rake task

# if your file is in imports/foo.csv, $MY_FILE should be foo.csv
heroku run -a clinwiki-prod rake import:csv["$MY_FILE"]

Running Exports

heroku run -a clinwiki-prod rake export:front_matter_csv > my-front-matter.csv

Working with Vagrant

Make sure you have a copy of cw-app located as a sibling of the root project directory.

You can once you've installed vagrant, you can install the vagrant VM by running vagrant up from the project root directory.

You can access the vagrant instance via vagrant ssh.

The following scripts are available

ScriptFunction
./scripts/vagrant/serverruns the server through vagrant, serving the API at port 3000
./scripts/vagrant/workerruns the worker within the vagrant server
./scripts/vagrant/frontendruns a hot-reloading version of the frontend

Initializing Data

We have already enqueued several tasks for the worker to run while provisioning Vagrant, but you will need to make sure to run the worker for those jobs to be handled.

Running the Server

In one vagrant SSH session, you will want to run the following:

cd /clinwki
./scripts/server

This will expose localhost:3000 to API requests.

From another session, run the following:

cd /cw-app
yarn start

This will run a hot-reloading session of the cw-app frontend.

To make sure reindexing and the like are handled on save, make sure to run ./scripts/worker in a separate session as well.

Run locally in production mode

  1. Create a .env file in root with the following contents
AACT_DATABASE_URL=postgres://$AACT_USER:$AACT_PASS@aact-db.ctti-clinicaltrials.org:5432/aact
MAILGUN_API_KEY=""
MAILGUN_DOMAIN="localhost:3000"
CW_HOST="localhost:3000"
CLINWIKI_DOMAIN="localhost:3000"
SECRET_KEY_BASE="lkdfjgldgjkdflgjlkdfjgldfkjg"
  1. Precompile assets
export$(cat .env | xargs)&& RAILS_ENV=production rake assets:precompile
  1. Start server
export$(cat .env | xargs)&& RAILS_ENV=production rails s

About

Crowd-source tool to annotate, rank and generally enhance the clarity and accuracy of clinical trial information.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Application: clinwiki

This application allows you to rate clinical trials. You can retrieve trials to rank by searching for NCT ID or MeSH Term

Installation / Running

You are encouraged to use rvm for Ruby version and gemset management. Once RVM is installed, switch to the correct Ruby and gemset as follows:

rvm use ruby-2.5.3@clinwiki --install --create

Then, from the project root directory:

bundle install
bundle exec rake db:create
bundle exec rake db:migrate

Once the dependencies are installed and the database is initialized, you can run the server with:

bundle exec rails s

Note that we are using dotenv to make the handling of database variables easier.

Environment Variables

We use a handful of environment variables to run the server. You can expose these when running locally by creating a .env file in the project root level directory. Here's an example:

# needed to connect to aact
AACT_DATABASE_URL=postgres://aact:aact@aact-db.ctti-clinicaltrials.org:5432/aact
REDIS_URL=redis://127.0.0.1:6379/0
DATABASE_URL=postgres://postgres@localhost:5432/clinwiki
#Optional
JWT_EXPIRATION_TIME_SECS=86400 # JWT expiration time

NOTE: The use of the DATABASE_URL environment variable should prevent the need for a database.yml file in when running the server in development mode.

Data Access

Databases

The AACT Clinical Trials Database provides data the data we use for clinical trials.

While the database is available online, you are encouraged to download a copy of the database for ease of access.

We maintain a separate postgres database for data related to users. Please refer to the Installation section for additional info.

If you don't have postgres installed locally, you can do so using homebrew:

brew install postgres

Elasticsearch

We use searchkick to enable search.

Follow the instructions in the searchkick docs for setting up Elasticsearch locally.

Indexing

Indexing is performed in the background by Sidekiq. You can run Sidekiq as follows:

bundle exec sidekiq -C config/sidekiq.yml

Note that with about 32 concurrent workers, it should take roughly 8 hours to fully reindex.

It's also worth noting that we run a background job every ten seconds to handle batch reindexing. This is important because it optimizes queries using ActiveRecord's includes functionality. Refer to the Study model's search_import scope for more details.

Scheduled jobs can be configured in ./config/schedule.yml.

To disable Auto indexing set env variables for sidekiq process:

AUTO_INDEX_LAST_DAYS=0

A full reindex can be performed by running:

bundle exec rake search:index

A development environments can bootstrap a subset of search results as follows:

bundle exec rake search:bootstrap_dev

Searching

Searching for studies is handled by Searchkick through the Studies model. Results are directly brokered through the Elasticsearch index, which brokers data from the annotation database along with the AACT database.

Running Imports

1) Generate your CSV

CSVs expect a header with the following format: nct_id,Type,Value,Action

We support Tag as a type, with Add or Remove as an action. For crowd values, there are two types of crowd values and both can use the 'Add' and 'Remove' options. For native fields that are crowd overwriteable, Add will add or overwrite a crowd definition for that field, and Remove will remove the crowd definition. For crowd values that produce custom facets, the "Type" in the csv ("label" value in the UI) will be the name of the facet. The "Value" in the csv ("description" in the UI) is the value(s) in the facet. For multiple values of the crowd facet, enter as multiple lines or separated on a single line by '|' (example Type = "Karnofsky Score Allowed", Value = "100|90|80|70")

2) Commit your CSV to the appropriate subfolder

The CSV should be exported to the imports/ within the root project folder.

You can commit the CSV with the following workflow, which assumes you have set up heroku's command line tools, and that the heroku remote points to the clinwiki-prod project:

git add imports
git commit -m 'Added import file'# you can write any comment you'd like
git push origin master # add to clinwiki-org/clinwiki
git push heroku master # add to heroku -- this should kick off a deploy

3) Run the CSV import Rake task

# if your file is in imports/foo.csv, $MY_FILE should be foo.csv
heroku run -a clinwiki-prod rake import:csv["$MY_FILE"]

Running Exports

heroku run -a clinwiki-prod rake export:front_matter_csv > my-front-matter.csv

Working with Vagrant

Make sure you have a copy of cw-app located as a sibling of the root project directory.

You can once you've installed vagrant, you can install the vagrant VM by running vagrant up from the project root directory.

You can access the vagrant instance via vagrant ssh.

The following scripts are available

ScriptFunction
./scripts/vagrant/serverruns the server through vagrant, serving the API at port 3000
./scripts/vagrant/workerruns the worker within the vagrant server
./scripts/vagrant/frontendruns a hot-reloading version of the frontend

Initializing Data

We have already enqueued several tasks for the worker to run while provisioning Vagrant, but you will need to make sure to run the worker for those jobs to be handled.

Running the Server

In one vagrant SSH session, you will want to run the following:

cd /clinwki
./scripts/server

This will expose localhost:3000 to API requests.

From another session, run the following:

cd /cw-app
yarn start

This will run a hot-reloading session of the cw-app frontend.

To make sure reindexing and the like are handled on save, make sure to run ./scripts/worker in a separate session as well.

Run locally in production mode

  1. Create a .env file in root with the following contents
AACT_DATABASE_URL=postgres://$AACT_USER:$AACT_PASS@aact-db.ctti-clinicaltrials.org:5432/aact
MAILGUN_API_KEY=""
MAILGUN_DOMAIN="localhost:3000"
CW_HOST="localhost:3000"
CLINWIKI_DOMAIN="localhost:3000"
SECRET_KEY_BASE="lkdfjgldgjkdflgjlkdfjgldfkjg"
  1. Precompile assets
export$(cat .env | xargs)&& RAILS_ENV=production rake assets:precompile
  1. Start server
export$(cat .env | xargs)&& RAILS_ENV=production rails s

About

Crowd-source tool to annotate, rank and generally enhance the clarity and accuracy of clinical trial information.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Application: clinwiki

This application allows you to rate clinical trials. You can retrieve trials to rank by searching for NCT ID or MeSH Term

Installation / Running

You are encouraged to use rvm for Ruby version and gemset management. Once RVM is installed, switch to the correct Ruby and gemset as follows:

rvm use ruby-2.5.3@clinwiki --install --create

Then, from the project root directory:

bundle install
bundle exec rake db:create
bundle exec rake db:migrate

Once the dependencies are installed and the database is initialized, you can run the server with:

bundle exec rails s

Note that we are using dotenv to make the handling of database variables easier.

Environment Variables

We use a handful of environment variables to run the server. You can expose these when running locally by creating a .env file in the project root level directory. Here's an example:

# needed to connect to aact
AACT_DATABASE_URL=postgres://aact:aact@aact-db.ctti-clinicaltrials.org:5432/aact
REDIS_URL=redis://127.0.0.1:6379/0
DATABASE_URL=postgres://postgres@localhost:5432/clinwiki
#Optional
JWT_EXPIRATION_TIME_SECS=86400 # JWT expiration time

NOTE: The use of the DATABASE_URL environment variable should prevent the need for a database.yml file in when running the server in development mode.

Data Access

Databases

The AACT Clinical Trials Database provides data the data we use for clinical trials.

While the database is available online, you are encouraged to download a copy of the database for ease of access.

We maintain a separate postgres database for data related to users. Please refer to the Installation section for additional info.

If you don't have postgres installed locally, you can do so using homebrew:

brew install postgres

Elasticsearch

We use searchkick to enable search.

Follow the instructions in the searchkick docs for setting up Elasticsearch locally.

Indexing

Indexing is performed in the background by Sidekiq. You can run Sidekiq as follows:

bundle exec sidekiq -C config/sidekiq.yml

Note that with about 32 concurrent workers, it should take roughly 8 hours to fully reindex.

It's also worth noting that we run a background job every ten seconds to handle batch reindexing. This is important because it optimizes queries using ActiveRecord's includes functionality. Refer to the Study model's search_import scope for more details.

Scheduled jobs can be configured in ./config/schedule.yml.

To disable Auto indexing set env variables for sidekiq process:

AUTO_INDEX_LAST_DAYS=0

A full reindex can be performed by running:

bundle exec rake search:index

A development environments can bootstrap a subset of search results as follows:

bundle exec rake search:bootstrap_dev

Searching

Searching for studies is handled by Searchkick through the Studies model. Results are directly brokered through the Elasticsearch index, which brokers data from the annotation database along with the AACT database.

Running Imports

1) Generate your CSV

CSVs expect a header with the following format: nct_id,Type,Value,Action

We support Tag as a type, with Add or Remove as an action. For crowd values, there are two types of crowd values and both can use the 'Add' and 'Remove' options. For native fields that are crowd overwriteable, Add will add or overwrite a crowd definition for that field, and Remove will remove the crowd definition. For crowd values that produce custom facets, the "Type" in the csv ("label" value in the UI) will be the name of the facet. The "Value" in the csv ("description" in the UI) is the value(s) in the facet. For multiple values of the crowd facet, enter as multiple lines or separated on a single line by '|' (example Type = "Karnofsky Score Allowed", Value = "100|90|80|70")

2) Commit your CSV to the appropriate subfolder

The CSV should be exported to the imports/ within the root project folder.

You can commit the CSV with the following workflow, which assumes you have set up heroku's command line tools, and that the heroku remote points to the clinwiki-prod project:

git add imports
git commit -m 'Added import file'# you can write any comment you'd like
git push origin master # add to clinwiki-org/clinwiki
git push heroku master # add to heroku -- this should kick off a deploy

3) Run the CSV import Rake task

# if your file is in imports/foo.csv, $MY_FILE should be foo.csv
heroku run -a clinwiki-prod rake import:csv["$MY_FILE"]

Running Exports

heroku run -a clinwiki-prod rake export:front_matter_csv > my-front-matter.csv

Working with Vagrant

Make sure you have a copy of cw-app located as a sibling of the root project directory.

You can once you've installed vagrant, you can install the vagrant VM by running vagrant up from the project root directory.

You can access the vagrant instance via vagrant ssh.

The following scripts are available

ScriptFunction
./scripts/vagrant/serverruns the server through vagrant, serving the API at port 3000
./scripts/vagrant/workerruns the worker within the vagrant server
./scripts/vagrant/frontendruns a hot-reloading version of the frontend

Initializing Data

We have already enqueued several tasks for the worker to run while provisioning Vagrant, but you will need to make sure to run the worker for those jobs to be handled.

Running the Server

In one vagrant SSH session, you will want to run the following:

cd /clinwki
./scripts/server

This will expose localhost:3000 to API requests.

From another session, run the following:

cd /cw-app
yarn start

This will run a hot-reloading session of the cw-app frontend.

To make sure reindexing and the like are handled on save, make sure to run ./scripts/worker in a separate session as well.

Run locally in production mode

  1. Create a .env file in root with the following contents
AACT_DATABASE_URL=postgres://$AACT_USER:$AACT_PASS@aact-db.ctti-clinicaltrials.org:5432/aact
MAILGUN_API_KEY=""
MAILGUN_DOMAIN="localhost:3000"
CW_HOST="localhost:3000"
CLINWIKI_DOMAIN="localhost:3000"
SECRET_KEY_BASE="lkdfjgldgjkdflgjlkdfjgldfkjg"
  1. Precompile assets
export$(cat .env | xargs)&& RAILS_ENV=production rake assets:precompile
  1. Start server
export$(cat .env | xargs)&& RAILS_ENV=production rails s

About

Crowd-source tool to annotate, rank and generally enhance the clarity and accuracy of clinical trial information.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Application: clinwiki

This application allows you to rate clinical trials. You can retrieve trials to rank by searching for NCT ID or MeSH Term

Installation / Running

You are encouraged to use rvm for Ruby version and gemset management. Once RVM is installed, switch to the correct Ruby and gemset as follows:

rvm use ruby-2.5.3@clinwiki --install --create

Then, from the project root directory:

bundle install
bundle exec rake db:create
bundle exec rake db:migrate

Once the dependencies are installed and the database is initialized, you can run the server with:

bundle exec rails s

Note that we are using dotenv to make the handling of database variables easier.

Environment Variables

We use a handful of environment variables to run the server. You can expose these when running locally by creating a .env file in the project root level directory. Here's an example:

# needed to connect to aact
AACT_DATABASE_URL=postgres://aact:aact@aact-db.ctti-clinicaltrials.org:5432/aact
REDIS_URL=redis://127.0.0.1:6379/0
DATABASE_URL=postgres://postgres@localhost:5432/clinwiki
#Optional
JWT_EXPIRATION_TIME_SECS=86400 # JWT expiration time

NOTE: The use of the DATABASE_URL environment variable should prevent the need for a database.yml file in when running the server in development mode.

Data Access

Databases

The AACT Clinical Trials Database provides data the data we use for clinical trials.

While the database is available online, you are encouraged to download a copy of the database for ease of access.

We maintain a separate postgres database for data related to users. Please refer to the Installation section for additional info.

If you don't have postgres installed locally, you can do so using homebrew:

brew install postgres

Elasticsearch

We use searchkick to enable search.

Follow the instructions in the searchkick docs for setting up Elasticsearch locally.

Indexing

Indexing is performed in the background by Sidekiq. You can run Sidekiq as follows:

bundle exec sidekiq -C config/sidekiq.yml

Note that with about 32 concurrent workers, it should take roughly 8 hours to fully reindex.

It's also worth noting that we run a background job every ten seconds to handle batch reindexing. This is important because it optimizes queries using ActiveRecord's includes functionality. Refer to the Study model's search_import scope for more details.

Scheduled jobs can be configured in ./config/schedule.yml.

To disable Auto indexing set env variables for sidekiq process:

AUTO_INDEX_LAST_DAYS=0

A full reindex can be performed by running:

bundle exec rake search:index

A development environments can bootstrap a subset of search results as follows:

bundle exec rake search:bootstrap_dev

Searching

Searching for studies is handled by Searchkick through the Studies model. Results are directly brokered through the Elasticsearch index, which brokers data from the annotation database along with the AACT database.

Running Imports

1) Generate your CSV

CSVs expect a header with the following format: nct_id,Type,Value,Action

We support Tag as a type, with Add or Remove as an action. For crowd values, there are two types of crowd values and both can use the 'Add' and 'Remove' options. For native fields that are crowd overwriteable, Add will add or overwrite a crowd definition for that field, and Remove will remove the crowd definition. For crowd values that produce custom facets, the "Type" in the csv ("label" value in the UI) will be the name of the facet. The "Value" in the csv ("description" in the UI) is the value(s) in the facet. For multiple values of the crowd facet, enter as multiple lines or separated on a single line by '|' (example Type = "Karnofsky Score Allowed", Value = "100|90|80|70")

2) Commit your CSV to the appropriate subfolder

The CSV should be exported to the imports/ within the root project folder.

You can commit the CSV with the following workflow, which assumes you have set up heroku's command line tools, and that the heroku remote points to the clinwiki-prod project:

git add imports
git commit -m 'Added import file'# you can write any comment you'd like
git push origin master # add to clinwiki-org/clinwiki
git push heroku master # add to heroku -- this should kick off a deploy

3) Run the CSV import Rake task

# if your file is in imports/foo.csv, $MY_FILE should be foo.csv
heroku run -a clinwiki-prod rake import:csv["$MY_FILE"]

Running Exports

heroku run -a clinwiki-prod rake export:front_matter_csv > my-front-matter.csv

Working with Vagrant

Make sure you have a copy of cw-app located as a sibling of the root project directory.

You can once you've installed vagrant, you can install the vagrant VM by running vagrant up from the project root directory.

You can access the vagrant instance via vagrant ssh.

The following scripts are available

ScriptFunction
./scripts/vagrant/serverruns the server through vagrant, serving the API at port 3000
./scripts/vagrant/workerruns the worker within the vagrant server
./scripts/vagrant/frontendruns a hot-reloading version of the frontend

Initializing Data

We have already enqueued several tasks for the worker to run while provisioning Vagrant, but you will need to make sure to run the worker for those jobs to be handled.

Running the Server

In one vagrant SSH session, you will want to run the following:

cd /clinwki
./scripts/server

This will expose localhost:3000 to API requests.

From another session, run the following:

cd /cw-app
yarn start

This will run a hot-reloading session of the cw-app frontend.

To make sure reindexing and the like are handled on save, make sure to run ./scripts/worker in a separate session as well.

Run locally in production mode

  1. Create a .env file in root with the following contents
AACT_DATABASE_URL=postgres://$AACT_USER:$AACT_PASS@aact-db.ctti-clinicaltrials.org:5432/aact
MAILGUN_API_KEY=""
MAILGUN_DOMAIN="localhost:3000"
CW_HOST="localhost:3000"
CLINWIKI_DOMAIN="localhost:3000"
SECRET_KEY_BASE="lkdfjgldgjkdflgjlkdfjgldfkjg"
  1. Precompile assets
export$(cat .env | xargs)&& RAILS_ENV=production rake assets:precompile
  1. Start server
export$(cat .env | xargs)&& RAILS_ENV=production rails s

About

Crowd-source tool to annotate, rank and generally enhance the clarity and accuracy of clinical trial information.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Application: clinwiki

This application allows you to rate clinical trials. You can retrieve trials to rank by searching for NCT ID or MeSH Term

Installation / Running

You are encouraged to use rvm for Ruby version and gemset management. Once RVM is installed, switch to the correct Ruby and gemset as follows:

rvm use ruby-2.5.3@clinwiki --install --create

Then, from the project root directory:

bundle install
bundle exec rake db:create
bundle exec rake db:migrate

Once the dependencies are installed and the database is initialized, you can run the server with:

bundle exec rails s

Note that we are using dotenv to make the handling of database variables easier.

Environment Variables

We use a handful of environment variables to run the server. You can expose these when running locally by creating a .env file in the project root level directory. Here's an example:

# needed to connect to aact
AACT_DATABASE_URL=postgres://aact:aact@aact-db.ctti-clinicaltrials.org:5432/aact
REDIS_URL=redis://127.0.0.1:6379/0
DATABASE_URL=postgres://postgres@localhost:5432/clinwiki
#Optional
JWT_EXPIRATION_TIME_SECS=86400 # JWT expiration time

NOTE: The use of the DATABASE_URL environment variable should prevent the need for a database.yml file in when running the server in development mode.

Data Access

Databases

The AACT Clinical Trials Database provides data the data we use for clinical trials.

While the database is available online, you are encouraged to download a copy of the database for ease of access.

We maintain a separate postgres database for data related to users. Please refer to the Installation section for additional info.

If you don't have postgres installed locally, you can do so using homebrew:

brew install postgres

Elasticsearch

We use searchkick to enable search.

Follow the instructions in the searchkick docs for setting up Elasticsearch locally.

Indexing

Indexing is performed in the background by Sidekiq. You can run Sidekiq as follows:

bundle exec sidekiq -C config/sidekiq.yml

Note that with about 32 concurrent workers, it should take roughly 8 hours to fully reindex.

It's also worth noting that we run a background job every ten seconds to handle batch reindexing. This is important because it optimizes queries using ActiveRecord's includes functionality. Refer to the Study model's search_import scope for more details.

Scheduled jobs can be configured in ./config/schedule.yml.

To disable Auto indexing set env variables for sidekiq process:

AUTO_INDEX_LAST_DAYS=0

A full reindex can be performed by running:

bundle exec rake search:index

A development environments can bootstrap a subset of search results as follows:

bundle exec rake search:bootstrap_dev

Searching

Searching for studies is handled by Searchkick through the Studies model. Results are directly brokered through the Elasticsearch index, which brokers data from the annotation database along with the AACT database.

Running Imports

1) Generate your CSV

CSVs expect a header with the following format: nct_id,Type,Value,Action

We support Tag as a type, with Add or Remove as an action. For crowd values, there are two types of crowd values and both can use the 'Add' and 'Remove' options. For native fields that are crowd overwriteable, Add will add or overwrite a crowd definition for that field, and Remove will remove the crowd definition. For crowd values that produce custom facets, the "Type" in the csv ("label" value in the UI) will be the name of the facet. The "Value" in the csv ("description" in the UI) is the value(s) in the facet. For multiple values of the crowd facet, enter as multiple lines or separated on a single line by '|' (example Type = "Karnofsky Score Allowed", Value = "100|90|80|70")

2) Commit your CSV to the appropriate subfolder

The CSV should be exported to the imports/ within the root project folder.

You can commit the CSV with the following workflow, which assumes you have set up heroku's command line tools, and that the heroku remote points to the clinwiki-prod project:

git add imports
git commit -m 'Added import file'# you can write any comment you'd like
git push origin master # add to clinwiki-org/clinwiki
git push heroku master # add to heroku -- this should kick off a deploy

3) Run the CSV import Rake task

# if your file is in imports/foo.csv, $MY_FILE should be foo.csv
heroku run -a clinwiki-prod rake import:csv["$MY_FILE"]

Running Exports

heroku run -a clinwiki-prod rake export:front_matter_csv > my-front-matter.csv

Working with Vagrant

Make sure you have a copy of cw-app located as a sibling of the root project directory.

You can once you've installed vagrant, you can install the vagrant VM by running vagrant up from the project root directory.

You can access the vagrant instance via vagrant ssh.

The following scripts are available

ScriptFunction
./scripts/vagrant/serverruns the server through vagrant, serving the API at port 3000
./scripts/vagrant/workerruns the worker within the vagrant server
./scripts/vagrant/frontendruns a hot-reloading version of the frontend

Initializing Data

We have already enqueued several tasks for the worker to run while provisioning Vagrant, but you will need to make sure to run the worker for those jobs to be handled.

Running the Server

In one vagrant SSH session, you will want to run the following:

cd /clinwki
./scripts/server

This will expose localhost:3000 to API requests.

From another session, run the following:

cd /cw-app
yarn start

This will run a hot-reloading session of the cw-app frontend.

To make sure reindexing and the like are handled on save, make sure to run ./scripts/worker in a separate session as well.

Run locally in production mode

  1. Create a .env file in root with the following contents
AACT_DATABASE_URL=postgres://$AACT_USER:$AACT_PASS@aact-db.ctti-clinicaltrials.org:5432/aact
MAILGUN_API_KEY=""
MAILGUN_DOMAIN="localhost:3000"
CW_HOST="localhost:3000"
CLINWIKI_DOMAIN="localhost:3000"
SECRET_KEY_BASE="lkdfjgldgjkdflgjlkdfjgldfkjg"
  1. Precompile assets
export$(cat .env | xargs)&& RAILS_ENV=production rake assets:precompile
  1. Start server
export$(cat .env | xargs)&& RAILS_ENV=production rails s

About

Crowd-source tool to annotate, rank and generally enhance the clarity and accuracy of clinical trial information.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Application: clinwiki

This application allows you to rate clinical trials. You can retrieve trials to rank by searching for NCT ID or MeSH Term

Installation / Running

You are encouraged to use rvm for Ruby version and gemset management. Once RVM is installed, switch to the correct Ruby and gemset as follows:

rvm use ruby-2.5.3@clinwiki --install --create

Then, from the project root directory:

bundle install
bundle exec rake db:create
bundle exec rake db:migrate

Once the dependencies are installed and the database is initialized, you can run the server with:

bundle exec rails s

Note that we are using dotenv to make the handling of database variables easier.

Environment Variables

We use a handful of environment variables to run the server. You can expose these when running locally by creating a .env file in the project root level directory. Here's an example:

# needed to connect to aact
AACT_DATABASE_URL=postgres://aact:aact@aact-db.ctti-clinicaltrials.org:5432/aact
REDIS_URL=redis://127.0.0.1:6379/0
DATABASE_URL=postgres://postgres@localhost:5432/clinwiki
#Optional
JWT_EXPIRATION_TIME_SECS=86400 # JWT expiration time

NOTE: The use of the DATABASE_URL environment variable should prevent the need for a database.yml file in when running the server in development mode.

Data Access

Databases

The AACT Clinical Trials Database provides data the data we use for clinical trials.

While the database is available online, you are encouraged to download a copy of the database for ease of access.

We maintain a separate postgres database for data related to users. Please refer to the Installation section for additional info.

If you don't have postgres installed locally, you can do so using homebrew:

brew install postgres

Elasticsearch

We use searchkick to enable search.

Follow the instructions in the searchkick docs for setting up Elasticsearch locally.

Indexing

Indexing is performed in the background by Sidekiq. You can run Sidekiq as follows:

bundle exec sidekiq -C config/sidekiq.yml

Note that with about 32 concurrent workers, it should take roughly 8 hours to fully reindex.

It's also worth noting that we run a background job every ten seconds to handle batch reindexing. This is important because it optimizes queries using ActiveRecord's includes functionality. Refer to the Study model's search_import scope for more details.

Scheduled jobs can be configured in ./config/schedule.yml.

To disable Auto indexing set env variables for sidekiq process:

AUTO_INDEX_LAST_DAYS=0

A full reindex can be performed by running:

bundle exec rake search:index

A development environments can bootstrap a subset of search results as follows:

bundle exec rake search:bootstrap_dev

Searching

Searching for studies is handled by Searchkick through the Studies model. Results are directly brokered through the Elasticsearch index, which brokers data from the annotation database along with the AACT database.

Running Imports

1) Generate your CSV

CSVs expect a header with the following format: nct_id,Type,Value,Action

We support Tag as a type, with Add or Remove as an action. For crowd values, there are two types of crowd values and both can use the 'Add' and 'Remove' options. For native fields that are crowd overwriteable, Add will add or overwrite a crowd definition for that field, and Remove will remove the crowd definition. For crowd values that produce custom facets, the "Type" in the csv ("label" value in the UI) will be the name of the facet. The "Value" in the csv ("description" in the UI) is the value(s) in the facet. For multiple values of the crowd facet, enter as multiple lines or separated on a single line by '|' (example Type = "Karnofsky Score Allowed", Value = "100|90|80|70")

2) Commit your CSV to the appropriate subfolder

The CSV should be exported to the imports/ within the root project folder.

You can commit the CSV with the following workflow, which assumes you have set up heroku's command line tools, and that the heroku remote points to the clinwiki-prod project:

git add imports
git commit -m 'Added import file'# you can write any comment you'd like
git push origin master # add to clinwiki-org/clinwiki
git push heroku master # add to heroku -- this should kick off a deploy

3) Run the CSV import Rake task

# if your file is in imports/foo.csv, $MY_FILE should be foo.csv
heroku run -a clinwiki-prod rake import:csv["$MY_FILE"]

Running Exports

heroku run -a clinwiki-prod rake export:front_matter_csv > my-front-matter.csv

Working with Vagrant

Make sure you have a copy of cw-app located as a sibling of the root project directory.

You can once you've installed vagrant, you can install the vagrant VM by running vagrant up from the project root directory.

You can access the vagrant instance via vagrant ssh.

The following scripts are available

ScriptFunction
./scripts/vagrant/serverruns the server through vagrant, serving the API at port 3000
./scripts/vagrant/workerruns the worker within the vagrant server
./scripts/vagrant/frontendruns a hot-reloading version of the frontend

Initializing Data

We have already enqueued several tasks for the worker to run while provisioning Vagrant, but you will need to make sure to run the worker for those jobs to be handled.

Running the Server

In one vagrant SSH session, you will want to run the following:

cd /clinwki
./scripts/server

This will expose localhost:3000 to API requests.

From another session, run the following:

cd /cw-app
yarn start

This will run a hot-reloading session of the cw-app frontend.

To make sure reindexing and the like are handled on save, make sure to run ./scripts/worker in a separate session as well.

Run locally in production mode

  1. Create a .env file in root with the following contents
AACT_DATABASE_URL=postgres://$AACT_USER:$AACT_PASS@aact-db.ctti-clinicaltrials.org:5432/aact
MAILGUN_API_KEY=""
MAILGUN_DOMAIN="localhost:3000"
CW_HOST="localhost:3000"
CLINWIKI_DOMAIN="localhost:3000"
SECRET_KEY_BASE="lkdfjgldgjkdflgjlkdfjgldfkjg"
  1. Precompile assets
export$(cat .env | xargs)&& RAILS_ENV=production rake assets:precompile
  1. Start server
export$(cat .env | xargs)&& RAILS_ENV=production rails s

About

Crowd-source tool to annotate, rank and generally enhance the clarity and accuracy of clinical trial information.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Application: clinwiki

This application allows you to rate clinical trials. You can retrieve trials to rank by searching for NCT ID or MeSH Term

Installation / Running

You are encouraged to use rvm for Ruby version and gemset management. Once RVM is installed, switch to the correct Ruby and gemset as follows:

rvm use ruby-2.5.3@clinwiki --install --create

Then, from the project root directory:

bundle install
bundle exec rake db:create
bundle exec rake db:migrate

Once the dependencies are installed and the database is initialized, you can run the server with:

bundle exec rails s

Note that we are using dotenv to make the handling of database variables easier.

Environment Variables

We use a handful of environment variables to run the server. You can expose these when running locally by creating a .env file in the project root level directory. Here's an example:

# needed to connect to aact
AACT_DATABASE_URL=postgres://aact:aact@aact-db.ctti-clinicaltrials.org:5432/aact
REDIS_URL=redis://127.0.0.1:6379/0
DATABASE_URL=postgres://postgres@localhost:5432/clinwiki
#Optional
JWT_EXPIRATION_TIME_SECS=86400 # JWT expiration time

NOTE: The use of the DATABASE_URL environment variable should prevent the need for a database.yml file in when running the server in development mode.

Data Access

Databases

The AACT Clinical Trials Database provides data the data we use for clinical trials.

While the database is available online, you are encouraged to download a copy of the database for ease of access.

We maintain a separate postgres database for data related to users. Please refer to the Installation section for additional info.

If you don't have postgres installed locally, you can do so using homebrew:

brew install postgres

Elasticsearch

We use searchkick to enable search.

Follow the instructions in the searchkick docs for setting up Elasticsearch locally.

Indexing

Indexing is performed in the background by Sidekiq. You can run Sidekiq as follows:

bundle exec sidekiq -C config/sidekiq.yml

Note that with about 32 concurrent workers, it should take roughly 8 hours to fully reindex.

It's also worth noting that we run a background job every ten seconds to handle batch reindexing. This is important because it optimizes queries using ActiveRecord's includes functionality. Refer to the Study model's search_import scope for more details.

Scheduled jobs can be configured in ./config/schedule.yml.

To disable Auto indexing set env variables for sidekiq process:

AUTO_INDEX_LAST_DAYS=0

A full reindex can be performed by running:

bundle exec rake search:index

A development environments can bootstrap a subset of search results as follows:

bundle exec rake search:bootstrap_dev

Searching

Searching for studies is handled by Searchkick through the Studies model. Results are directly brokered through the Elasticsearch index, which brokers data from the annotation database along with the AACT database.

Running Imports

1) Generate your CSV

CSVs expect a header with the following format: nct_id,Type,Value,Action

We support Tag as a type, with Add or Remove as an action. For crowd values, there are two types of crowd values and both can use the 'Add' and 'Remove' options. For native fields that are crowd overwriteable, Add will add or overwrite a crowd definition for that field, and Remove will remove the crowd definition. For crowd values that produce custom facets, the "Type" in the csv ("label" value in the UI) will be the name of the facet. The "Value" in the csv ("description" in the UI) is the value(s) in the facet. For multiple values of the crowd facet, enter as multiple lines or separated on a single line by '|' (example Type = "Karnofsky Score Allowed", Value = "100|90|80|70")

2) Commit your CSV to the appropriate subfolder

The CSV should be exported to the imports/ within the root project folder.

You can commit the CSV with the following workflow, which assumes you have set up heroku's command line tools, and that the heroku remote points to the clinwiki-prod project:

git add imports
git commit -m 'Added import file'# you can write any comment you'd like
git push origin master # add to clinwiki-org/clinwiki
git push heroku master # add to heroku -- this should kick off a deploy

3) Run the CSV import Rake task

# if your file is in imports/foo.csv, $MY_FILE should be foo.csv
heroku run -a clinwiki-prod rake import:csv["$MY_FILE"]

Running Exports

heroku run -a clinwiki-prod rake export:front_matter_csv > my-front-matter.csv

Working with Vagrant

Make sure you have a copy of cw-app located as a sibling of the root project directory.

You can once you've installed vagrant, you can install the vagrant VM by running vagrant up from the project root directory.

You can access the vagrant instance via vagrant ssh.

The following scripts are available

ScriptFunction
./scripts/vagrant/serverruns the server through vagrant, serving the API at port 3000
./scripts/vagrant/workerruns the worker within the vagrant server
./scripts/vagrant/frontendruns a hot-reloading version of the frontend

Initializing Data

We have already enqueued several tasks for the worker to run while provisioning Vagrant, but you will need to make sure to run the worker for those jobs to be handled.

Running the Server

In one vagrant SSH session, you will want to run the following:

cd /clinwki
./scripts/server

This will expose localhost:3000 to API requests.

From another session, run the following:

cd /cw-app
yarn start

This will run a hot-reloading session of the cw-app frontend.

To make sure reindexing and the like are handled on save, make sure to run ./scripts/worker in a separate session as well.

Run locally in production mode

  1. Create a .env file in root with the following contents
AACT_DATABASE_URL=postgres://$AACT_USER:$AACT_PASS@aact-db.ctti-clinicaltrials.org:5432/aact
MAILGUN_API_KEY=""
MAILGUN_DOMAIN="localhost:3000"
CW_HOST="localhost:3000"
CLINWIKI_DOMAIN="localhost:3000"
SECRET_KEY_BASE="lkdfjgldgjkdflgjlkdfjgldfkjg"
  1. Precompile assets
export$(cat .env | xargs)&& RAILS_ENV=production rake assets:precompile
  1. Start server
export$(cat .env | xargs)&& RAILS_ENV=production rails s

About

Crowd-source tool to annotate, rank and generally enhance the clarity and accuracy of clinical trial information.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages