Pandemia adalah program sumber terbuka (open source) yang dikembangkan oleh komunitas untuk memudahkan dalam memantau persebaran wabah, sehingga dapat mengambil keputusan yang lebih bijak dan terukur dalam melakukan kegiatan kesehariannya.
Motivasi
Melihat situasi pandemi covid-19 terutama di Indonesia yang semakin hari semakin luas, serta masih sangat terbatasnya peran teknologi dalam pemanfaatannya untuk mitigasi, ditambah sumber data dari pemerintah yang masih tersebar di sana-sini, maka kami bermaksud untuk membuat satu fondasi aplikasi lengkap yang mana bisa dimanfaatkan oleh penerbit data yang bisa merupakan pemerintah maupun organisasi independen serta pengkonsumsi data dalam hal ini masyarakat luas. Penerbit data memasukkan data melalui control center berbasis web, sementara masyarakat memonitor secara real-time melalui App pada smartphone mereka, Mengapa App? Karena beberapa fungsi tidak maksimal atau bahkan tidak jalan apabila dalam bentuk web seperti yang sudah ada sekarang, kedua App tidak hanya berfungsi sebagai alat monitor, tetapi juga bisa digunakan sebagai alat bantu pelengkap data secara crowd sourcing.
Target:
- Realtime feed berupa data update kasus terbaru pada suatu daerah.
- Push notif untuk setiap update kasus terbaru di daerah kita.
- Data statistik daerah.
- Data Fakta dan Hoax berkaitan dengan pandemi.
- Peta Pandemi.
- Push notif berupa peringatan ketika memasuki daerah dengan riwayat korban positif.
- Peta Keluhan, menandai diri kita sedang mengalami keluhan kesehatan secara anonim.
- Peta data fasilitas kesehatan seperti ketersediaan tempat tidur pasien pada rumah sakit.
Tersedia juga control center (dashboard) dalam bentuk web untuk mempermudah komunitas dalam memperbaharui data.
Anda bisa mengunduh aplikasi Pandemia terbaru dari halaman rilis, halaman tersebut akan selalu diperbaharui apabila ada rilis terbaru.
Pandemia adalah proyek sumber terbuka (open source), bagi para pengembang (programmer) yang ingin ikut membantu silahkan fork kode sumber Pandemia di https://github.com/cesindo/pandemia.
Pertanyaan dan diskusi teknis bisa langsung di Gitter Pandemia, kami akan sangat senang melayani.
Untuk yang ingin langsung mengkonsumsi API bisa baca dokumentasi API di Pandemia REST API.
Basis API endpoint ada di https://pandemia.cesindo.top/api
Contoh untuk mendapatkan informasi build https://pandemia.cesindo.top/api/system/v1/info.
Bagi pengguna Postman bisa download postman file definisi-nya: pandemia-api.postman.
Daftar kebutuhan berikut dibutuhkan apabila kita ingin melakukan build di mesin environment lokal, kamu bisa juga melakukan build menggunakan Docker sehingga tidak perlu menginstall satu-per-satu kebutuhan ini. Untuk build menggunakan Docker lihat bagian Build menngunakan Docker. Berikut kebutuhan pokok untuk bisa melakukan build di mesin lokal:
Backend Server:
- Rust
- PostgreSQL >= 9.x
- diesel
- Aglio (optional, untuk dokumentasi)
- Rustfmt
- Cargo clippy
- Cargo audit
- Protocol Buffer
Web Frontend:
Mobile Frontend:
- Flutter
- Xcode <-- untuk iOS
- Android SDK <-- untuk Android
Sebelum melakukan build pastikan dulu Libpq (Library-nya PostgreSQL) telah tersedia, di Ubuntu bisa menggunakan perintah apt install libpq-dev
atau di Debian apt install libpq-devel
, di OSX bisa menggunakan perintah: brew install libpq
.
Buat konfigurasi environment variable melalui file .env
(dot env):
export DATABASE_URL=postgresql://localhost/pandemia?sslmode=disable
export DATABASE_TEST_URL=postgresql://localhost/pandemia_test?sslmode=disable
export FCM_SERVER_KEY=xxxxxxxx
export GEOLOCATOR_API_KEY=xxxxxxxx
Untuk contoh bisa lihat file .env.example
.
Setelah semua siap, ketikkan:
$ cargo build
Cara paling mudah untuk melakukan build adalah menggunakan Docker:
$ docker run -it --rm -v $(pwd):/workdir \
-v /tmp:/root/.cargo/git \
-v /tmp:/root/.cargo/registry \
anvie/rust-musl-build:latest \
cargo build --release --target=x86_64-unknown-linux-musl
Docker image anvie/rust-musl-build
adalah container berbasis Linux dan sudah berisi semua kebutuhan development untuk build project ini, setelah build selesai
output bisa didapatkan di target/x86_64-unknown-linux-musl
.
Kamu bisa juga menjalankan perintah tersebut menggunakan make:
$ make release-linux
Testing kebanyakan ditulis terintegrasi (integration testing), untuk itu perlu menjalankan database dan mempersiapkan environment-nya, ini hanya perlu dijalankan sekali, ketikkan:
$ make test-env
CATATAN: Perintah test-env
akan membuat database baru dengan nama pandemia_test
dimana database ini akan digunakan
sebagai storage ketika proses testing terjadi.
Perintah make test-env
ini juga perlu dijalankan ulang apabila ada perubahan schema untuk memastikan schema
dalam database selalu up-to-date.
Untuk melakukan test ketikkan:
$ make test
Untuk menjalankan service pandemia perlu dipastikan service PostgreSQL sudah jalan terlebih dahulu, dan telah disetup database-nya.
Untuk men-setup database bisa menggunakan perintah:
$ make reset-db
Selanjutkan jalankan Pandemia servernya:
$ cargo run --bin pandemia_server
Atau untuk development gunakan script:
$ ./etc/script/run-dev.sh
Untuk frontend web menggunakan Vue.js, base ada di direktori /frontends
.
Apabila ingin mencoba menjalankannya bisa check frontend web dengan langkah-langkah berikut:
$ cd frontends/pandemia_web
$ npm install
$ npm start
Apabila menggunakan Yarn bisa:
$ cd frontends/pandemia_web
$ yarn install
$ yarn serve
Buka http://localhost:8080/ atau apabila server juga jalan di lokal bisa port-nya berubah menjadi http://localhost:8081/
Untuk Vue.js ada di /frontends/pandemia_web
:
$ cd frontends/pandemia_web
$ yarn install
$ yarn serve
CATATAN: Kamu bisa menggunakan npm maupun yarn, tapi direkomendasikan menggunakan yarn.
Untuk frontend mobile menggunakan Flutter, bisa ditemukan di direktori /frontends/pandemia_mobile
.
Contoh cara menjalankan:
$ cd frontends/pandemia_mobile
$ flutter pub get
$ flutter run
Dokumentasi dibagikan menjadi beberapa bagian:
- Dokumentasi pustaka (library).
- Dokumentasi Rest API.
Untuk menggenerasikan dokumentasi pustaka cukup ketikkan:
$ make lib-docs
Untuk menggenerasikan dokumentasi rest API:
$ make api-docs
CATATAN: Penggenerasian dokumentasi untuk rest API membutuhkan tool Aglio.
Setiap perubahan pada project ini harus mengikuti konvensi ini.
- Setiap menambahkan parameter melalui environment variable yang wajib (yang menyebabkan aplikasi error apabila tidak diset) contohnya seperti yang diakses menggunakan macro
env!
maka perlu mengupdate juga file.env.example
karena sebagai contoh konfigurasi untuk team.
Sebelum melakukan commit harus:
- Memastikan kodenya telah diformat menggunakan perintah:
make fmt
. - Memastikan kodenya telah layak sesuai standar dengan cara menjalankan perintah:
make lint
. - Memastikan kodenya telah lolos unittest dengan cara menjalankan perintah:
make test
. - Memastikan kodenya telah aman dari dependensi yang bermasalah dengan menjalankan perintah:
make audit
. - Menggunakan tata bahasa yang mudah dipahami dan menjelaskan perubahan mendasar pada commit message-nya.
Case
$ docker-compose up
ERROR: Version in "./docker-compose.yml" is unsupported.
Itu artinya versi docker-compose
yang ada di sistem mu tidak support, maka perlu dilakukan install manual:
Fix (ubuntu 16.04)
$ sudo curl -L sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
Case
Ketika install diesel muncul error seperti berikut:
$ cargo install diesel_cli --no-default-features --features postgres
Error : cannot find lpg
Itu artinya library postgres-devel belum diinstall, maka perlu intsall dulu libpq:
Fix (ubuntu 16.04) sudo apt install libpq-dev
Case
Ketika sedang compile/test gagal dengan error kurang lebih seperti ini:
ERROR pandemia::api::error] error: "relation \"transactions\" does not exist"
Itu artinya table schema mu yang digunakan untuk test belum up-to-date dengan schema terbaru, maka perlu dilakukan migration untuk apply patch-nya:
$ diesel migration run --database-url postgresql://localhost/pandemia_test?sslmode=disable
Atau reset database untuk test-nya agar di-rebuild schema-nya dari pertama:
$ make test-env
Terimakasih kepada para kontributor yang telah membantu proyek ini:
- Delameta (donasi server)
- Detax.org (data hoax/fakta)
- Robin - @anvie
- Cak Nasrul - @luffynas
- Fatkhurohman
- Samsul
- Rifai
- Muiz
Kami masih menerima donasi berupa server dan tenaga data, apabila ada yang bersedia menjadi kontributor/relawan kirim email ke proyekpandemia@gmail.com