TUGAS AKHIR
Makassar
Disusun Oleh :
FAKULTAS TEKNIK
UNIVERSITAS HASANUDDIN
MAKASSAR
2019
ii
ABSTRAK
iii
KATA PENGANTAR
Segala puji dan syukur kami panjatkan ke hadirat Allah S.W.T Tuhan Yang Maha
Esa yang dengan limpahan rahmat dan hidayah-Nya sehingga tugas akhir dengan
Angular” ini dapat diselesaikan sebagai salah satu syarat dalam menyelesaikan
Hasanuddin.
yang telah diangkat dan telah melalui proses pencarian dari berbagai sumber baik
Penulis menyadari bahwa tanpa bantuan dan bimbingan dari berbagai pihak,
mulai dari masa perkuliahan sampai dengan masa penyusunan tugas akhir,
sangatlah sulit untuk menyelesaikan tugas akhir ini. Oleh karena itu, pada
kepada:
1) Tuhan Yang Maha Esa atas semua berkat, karunia serta pertolongan-Nya yang
tiada batas, yang telah diberikan kepada penulis disetiap langkah dalam
iv
2) Kedua orang tua penulis serta saudara-saudara penulis, serta keluarga yang
3) Bapak Dr. Amil Ahmad Ilham, S.T., M.IT., selaku pembimbing I yang telah
kepada penulis.
4) Bapak Dr. Eng. Zulkifli Tahir, S.T., M.Sc., selaku pembimbing II yang telah
kepada penulis.
5) Bapak Prof. Dr. Ir. H. Andani Achmad, M.T., Bapak Adnan, S.T., M.T.,
Ph.D., dan Bapak Dr.Eng. Wardi, S.T., M.Eng., selaku dosen penguji yang
telah memberikan saran sehingga laporan skripsi ini menjadi lebih baik
6) Bapak Dr. Amil Ahmad Ilham, S.T., M.IT., selaku Ketua Departemen Teknik
penulis.
8) Bapak Robert, Bapak Zainuddin dan Ibu Santi serta segenap staf Departemen
9) Para sahabat dekat penulis terutama Andi Muhammad Dayri Satriawan dan
Rahmat Firman, Zulfadli A.S, Alamsyah Ibrahim, dan Muhammad Fajri Kahfi
v
Kuddus yang telah memberikan doa, bantuan dan dukungan serta bimbingan
10) Para sahabat penulis terutama Al Riefqy Dasmito, Gian Aron Angelo R., Andi
Muhammad Fauzy, Muh. Aryandi, Muh. Rizky Eka Arlin, Muh. Arkan
Musyabbir, Tiwi Nur Safitri, Muh. Fachrial Yuni Yunizar, Alwi, Fitriani Idrus,
yang telah memberikan doa, nasihat, bantuan dan semangat selama proses
12) Serta seluruh pihak yang tidak sempat disebutkan satu persatu yang telah
Akhir kata, penulis berharap semoga Tuhan Yang Maha Esa berkenan
membalas segala kebaikan dari semua pihak yang telah banyak membantu. Semoga
tugas akhir ini dapat memberikan manfaat bagi pengembangan ilmu selanjutnya.
Amin.
Wassalamualaikum
Penulis
vi
DAFTAR ISI
BAB I ....................................................................................................................... 1
PENDAHULUAN ................................................................................................... 1
BAB II ...................................................................................................................... 8
vii
2.1.2 Web App Manifest ............................................................................................. 10
2.2 MEAN Stack Aplication ................................................................................ 11
2.2.1 MongoDb........................................................................................................... 12
2.2.2 Express .............................................................................................................. 13
2.4.3 Angular .............................................................................................................. 13
2.2.4 Node JS ............................................................................................................. 15
2.3 JSON .............................................................................................................. 16
viii
4.1 Pengujian Respon Time .................................................................................. 43
BAB V ................................................................................................................... 68
PENUTUP.............................................................................................................. 68
LAMPIRAN ........................................................................................................... 73
ix
DAFTAR GAMBAR
Gambar 4.1 Grafik Waktu Respon Time Pada Akses Halaman Index Website ............... 44
Gambar 4.2 Grafik Waktu Respon Time Pada Akses Halaman Create User .................. 47
Gambar 4.3 Throughput Dengan dan Tanpa Service Worker Halaman Index ................ 50
Gambar 4.4 Throughput Dengan dan Tanpa Service Worker Halaman Create............... 52
x
DAFTAR TABEL
Tabel 4.1. Hasil Pengujian rata-rata Respon Time Halaman Index ......................43
Tabel 4.2. Hasil Pengujian rata-rata Respon Time Halaman Create User ...........46
Tabel 4.4. Hasil Pengujian rata-rata Respon Time Halaman Create User ............51
Tabel 4.11. Hasil Pengujian Black-Box Akses Halaman Update Profile .............61
xi
xii
BAB I
PENDAHULUAN
percontohan bagi Perguruan Tinggi lainnya. Hal ini tentunya tidak diperoleh
dengan mudah karena segudang prestasi harus diukir agar dapat mencapai hal itu.
Berdasarkan info dari situs resmi Lembaga Kajian dan Pengembangan Pendidikan
Hasanuddin.
kualitas mahasiswa dan tenaga pengajar yang profesional. Sejalan dengan hal itu
1
Hasanuddin. Salah satunya ialah besarnya jumlah tagihan penggunaan energi listrik
yang harus dikeluarkan setiap bulannya. Untuk itu perlu dilakukan monitoring
secara rutin agar dapat mengetahui besaran penggunaan listrik yang terpakai. Tidak
sebatas itu saja kontroling penggunaan energi listrik juga dibutuhkan. Hal ini
bertujuan agar penggunaan energi listrik yang tidak sesuai dapat dihentikan
dengan cara mengecek setiap ruangan yang menggunakan energi listrik lalu
sederhana dan perhitungan yang masih manual sehingga proses pemantauan data
penggunaan energi listrik tidak dapat diperoleh setiap saat karena perhitungan
waktu yang lebih lama untuk mengetahuinya. Oleh sebab itu dibutuhkan sebuah
teknologi yang dapat melakukan kontrol dan monitoring penggunaan energi listrik
secara realtime agar operator dapat memperoleh data terbaru dan mengolahnya
bahasa pemrograman client side dan server side. Namun dengan perkembangan
2
dengan tujuan memberikan kemudahan bagi para pengembang. Angular adalah
membuat sebuah website yang memiliki performa lebih baik dan mampu membuat
sebuah website yang tidak bergantung pada koneksi jaringan yang handal.
yang saat ini sedang berkembang dengan sangat pesat. Progresive web app
offline.
yang merupakan salah satu APIs Java script yang memungkinkan pengembang
dalam melakukan pemrograman cache dan melakukan load asset data, melakukan
kelebihan dalam hal koneksi internet yang tidak stabil ataupun lambat sehingga
membuat sistem yang dibangun tidak terlalu bergantung pada koneksi internet yang
cepat. Selain itu disatu sisi service worker disebut sebagai performance booster
karena menghemat jaringan dan menyediakan user experience yang lebih baik. (D.
Sheppard, 2017)
background website utama dan berjalan secara paralel dengan website utama
sehingga kerja dari service worker tidak terlalu terlihat secara langsung. Service
3
worker pada dasarnya adalah sebuah script atau java script file yang berjalan di
belakang website utama dan membantu dalam pengembangan aplikasi web offline.
walaupun koneksi jaringan yang lemah ataupun tidak ada koneksi internet
sekalipun. Oleh sebab itu penulis mengangkat sebuah tugas akhir dengan judul
stack aplication?
Merujuk pada rumusan masalah yang ada, maka tujuan yang ingin dicapai
4
1. Membuat sebuah sistem berbasis web yang dapat melakukan kontrol
2. Memberikan performa yang lebih baik pada sistem web yang dibangun.
permasalahan ini, maka perlu adanya batasan-batasan masalah yang jelas mengenai
apa yang dibuat dan diselesaikan dalam program ini. Adapun batasan-batasan
Gowa.
5
3. Pembuatan Website menggunakan Framework website javascript yaitu
Angular 6.
stack application.
sistematis, yaitu:
BAB I PENDAHULUAN
bagaimana latar belakang pembuatan aplikasi ini akan dibuat, ruang lingkup
tujuan dan manfaat dari pembuatan aplikasi ini bagi para pengguna,
6
BAB II TINJAUAN PUSTAKA
sebagainya.
keseluruhan.
BAB V PENUTUP
Bab ini berisi kesimpulan dan penelitian yang telah dibuat, serta
7
BAB II
TINJAUAN PUSTAKA
Progressive Web App (PWA) adalah mobile web yang diubah dengan fitur
dan meningkatkan kecepatan load website bahkan situs bisa diakses tanpa koneksi
internet sekalipun. API service worker ini yang bertugas untuk melakukan caching
terhadap semua data yang terdapat pada website agar jika dikunjungi kembali data
(Progressive Web Apps, Google). Dengan kata lain PWA layaknya aplikasi
smartphone namun pada dasarnya adalah sebuah website. Salah satu prinsip utama
PWA adalah aksesibilitas yang bisa diakses dimana saja dan kapan saja. (M. Gaunt,
2018)
Apps adalah:
intinya.
8
Konektivitas independen - Disempurnakan dengan service worker
membuka pintu ke berbagai fitur yang tidak memerlukan laman web atau
9
PWA dapat berjalan secara offline, menerima notifikasi layaknya native
Offline first – Aplikasi Web dapat terbuka secara offline tanpa adanya
sebuah aksi yang dilakukan di website jika tidak ada koneksi internet, dan
aksi tersebut akan dilakukan ketika koneksi internet tersedia. Misalnya jika
membeli barang di website took online. Ketika ingin membeli barang, anda
service worker akan bekerja untuk menunda aksi sampai koneksi internet
muncul kembali.
Self-update – aplikasi web yang berbasis PWA tidak perlu lagi diupdate di
play store seperti native application. Update terbaru akan terus ada untuk
Web app Manifest adalah file JSON sederhana yang memberi tahu
browser tentang aplikasi web apa yang harus dilakukan ketika akan 'diinstal'
pada perangkat seluler atau desktop pengguna. File manifest inilah yang
10
diperlukan oleh web browser dapat melakukan perintah ‘instal’ pada
perangkat.
MEAN stack pada dasarnya adalah sekumpulan komponen atau tools yang
stack diangkat dari singkatan beberapa teknologi yang digunakan di dalamnya yang
Angular, dan NodeJS. Kombinasi dari kumpulan teknologi ini dapat berjalan
dengan baik dan stabil secara bersamaan sehingga dapat diterapkan untuk
kombinasi dari beberapa framework yang open source untuk membangun aplikasi
11
Gambar 2.1 Arsitektur Mean Stack
2.2.1 MongoDb
data melalui fungsionalitas yang disediakan oleh node js. MongoDb bekerja
12
Sebuah document pada MongoDb merupakan seperangkat pasangan
artinya, document dalam collection yang sama tidak perlu memiliki struktur
yang sama dan komponen isi yang sama. Dengan kata lain bila kita
membutuhkan struktur data yang berbeda dalam satu collection maka kita
tidak perlu mengubah struktur data document lainya yang terdapat dalam
collection yang sama. MongoDb juga mendukung berbagai tipe data yang
2.2.2 Express
bekerja di sisi server yang dibangun dalam lingkup node js seperti yang
dan operasi HTTP (PUT, GET, POST dan sebagainya). Express dapat
2.4.3 Angular
Google dan digunakan dalam menangani seluruh aplikasi client side dan
13
application (SPA) yang memuat seluruh halaman website kedalam satu
dari sisi klien. Hal ini membantu meringankan beban di sisi server dengan
beban margin proses yang cukup besar. Keistimewaan lain dari Angular
Kavya, 2015)
yang ditulis untuk mengelola template dan service yang berisi logika bisnis
dari aplikasi. Pendekatan modular ini, juga diilustrasikan pada gambar 2.3,
14
lain. Jika pedoman pengembangan framework dipatuhi, akan terasa lebih
2.2.4 Node JS
dan ringan, serta ideal untuk membangun webservice API (D. Sheppard,
I/O, networking, binary data, kriptografi, data stream, dll. Saat ini node telah
15
2.3 JSON
format yang dapat dibaca dan dikenali oleh manusia untuk merepresentasikan
struktur data sederhana dan array asosiatif. JSON merupakan bahasa independen
yang lengkap dan menggunakan konvensi yang akrab bagi para programmer bahasa
dan lainnya
bekerja dalam situasi di mana tidak ada koneksi internet, tidak seperti aplikasi web
standar. Aplikasi web semacam ini menyimpan sumber daya aplikasi web dan data
pengguna yang penting pada mesin klien secara terus-menerus alih-alih membawa
menggunakan sumber daya yang tersimpan di perangkat lokal. Selain itu, ini
tersebut, diantaranya:
16
Service Worker – Service worker adalah salah satu jenis dari web
Service worker pada dasarnya adalah berkas Java script yang berjalan
kurang aman, API ini memberikan keamanan yang lebih baik dan
memiliki fitur privasi yang lebih besar. Selain itu, lebih mudah dan
tentang halaman web mana yang akan di-cache dalam situasi di mana
tidak ada koneksi jaringan. Masalah kedua adalah bahwa caching situs
17
halaman yang di-cache ketika tidak ada koneksi internet. Untuk
developer web dapat dengan mudah memutuskan file yang akan di-
di muka untuk memilih seperti apa situs web yang direncanakan saat
offline.
Java 100% murni yang dirancang untuk memuat perilaku fungsional uji dan
mengukur kinerja. Awalnya dirancang untuk menguji Aplikasi Web tetapi sejak itu
Apache JMeter dapat digunakan untuk menguji kinerja baik pada sumber
daya statis dan dinamis, aplikasi dinamis Web. Ini dapat digunakan untuk
mensimulasikan beban berat pada server, kelompok server, jaringan atau objek
18
BAB III
METODOLOGI PENELITIAN
Instrumen yang digunakan pada penelitian ini terdiri dari Hardware dan Software.
1) Hardware
GPU:
Bandwidth: 10 Mbps
2) Software
19
rancangan sistem adalah:
d) Angular 6
e) Material Angular
f) Apache Jmeter
g) Library Mongoose
h) NodeJS
i) ExpressJS
j) Angular CLI
k) Socket.io
l) NPM Package
m) Local Storage
n) MongoDB Compass
20
Tahapan secara garis dijelaskan sebagai berikut:
2. Pada tahap ini dilakukan perancangan desain sistem yang akan dibuat
sehingga sistem yang dibuat dapat di akses pada kondisi jaringan yang
21
6. Pada tahap ini, kemudian sistem dibuat agar mampu melakukan
dengan basis data Local Storage. Sehingga manajemen basis data tetap
komponen website yang ada kepada client dengan jumlah yang besar
energi listrik secara realtime dengan mengedepankan User Interface dan User
Experience (UI/UX) yang dinamis dan sesuai dengan kebutuhan user serta dapat
22
Gambar 3.2. Gambaran Umum Proses Kerja Sistem
Gambar 3.2 merupakan penggambaran umum proses monitoring dan
kontroling penggunaan energy listrik yang dapat dilakukan pada sistem yang
dibangun. Proses dilakukan oleh admin ruangan dengan melakukan login terlebih
dahulu agar admin dapat terverifikasi sebagai admin ruangan lalu kemudian
aplikasi akan memberikan hak akses kepada admin agar dapat memantau kondisi
lampu dan melakukan kontrol baik itu on ataupun off pada ruangannya.
lampu maka sistem akan mengirimkan data berupa binary digit 0 atau 1 ke dalam
database yang sesuai dengan id dan node yang dimiliki oleh lampu yang telah
berikan aksi. Data yang telah dikirim akan dibaca oleh lora dan akan di eksekusi
oleh switch yang terdapat didalam rangkaian Arduino untuk melakukan aksi on atau
23
Sistem dibangun dengan memanfaatkan teknologi web agar sistem dapat
platform apa yang dimiliki user. Sehingga user tetap dapat melakukan kontroling
memiliki satu persoalan yang umum yaitu tidak dapat dijalankan jika tidak
Sistem ini akan dibuat untuk mampu bekerja secara offline maupun online.
Dengan menggunakan basis data lokal berupa Local Storage untuk menangani data
secara lokal atau offline dan MongoDb sebagai backend service untuk menangani
manajemen basis data secara online. Kedua basis data ini akan melakukan
Sistem yang dibuat sesuai dengan alur pada gambar 3.3. Aplikasi akan
mengirimkan request data dan ditangkap oleh service worker. Kemudian service
worker akan mengecek apakah website online atau offline. Jika offline, service
24
worker akan mengambil data yang berada pada local system dan cache storage lalu
service worker akan mengambil data di MongoDb dan dari sini, akan dikirim
data terbaru yang ada di MongoDb dan dimasukkan ke Local System untuk
pembaruan data didalamnya yang berfungsi jika website diakses secara offline
penyimpanan data lokal disisi klien. Data yang disimpan di Local Storage berupa
data-data produk yang dibeli oleh pembeli dan data-data produk yang ada pada
masing tingkatan entity atau penggunanya. Skenario dari sistem yang dibuat
ditunjukkan dengan use case diagram pada gambar 3.4 skenario yang ada
tingkatan user.
25
Gambar 3.4 Use Case Diagram Sistem
Use case dari sistem mulai dari super admin, memiliki interaksi
dengan halaman login dan logout, serta memiliki fungsi untuk menambah,
listrik pada seluruh ruangan serta melihat perhitungan Kwh dalam bentuk
live charts. Pada level admin memiliki interaksi dengan halaman login dan
logout, lalu halaman edit profile admin, dan kemampuan untuk mengontrol
serta memonitoring ruangan admin. Sedangkan pada level user hanya diberi
26
3.4.2 Database Diagram Sistem
entity users karena setiap user dalam hal ini dikategorikan sebagai admin
27
energyConsumption terhubung dengan entity nodeStatus karena dalam satu
sebagai Backend Service yang melakukan pemrosesan data di sisi server. Sistem ini
menerapkan teknologi Single Page Application (SPA). Sistem yang dibuat telah
28
Gambar 3.8 Halaman Login
29
Gambar 3.11 Halaman Config (admin)
dashboard, halaman carts, halaman rooms, halaman profile, halaman config. Selain
itu sistem yang dibangun akan dilakukan pengujian dan di bandingkan dengan
30
Penjabaran rancangan fungsional akses halaman dashboard / index
gambar 3.12.
31
Selanjutnya data arus yang telah diterima akan diolah untuk mendapatkan nilai
Kwh untuk setiap ruangan. Perhitungan nilai Kwh ini dilakukan pada sisi client
(web browser). Selanjutnya client akan menampilkan data perhitungan Kwh dalam
bentuk chart. Setelah semua proses berhasil dilakukan service worker akan
menyimpan data tersebut ke dalam database lokal sehingga ketika website dalam
keadaan offline pengguna akan tetap dapat memonitoring penggunaan energi listrik
terakhir yang diterima oleh web browser. Proses request data dilakukan pada
background service dalam interval waktu 10 detik sehingga meskipun user tidak
sedang mengakses halaman charts sistem akan tetap menerima data terbaru
penggunaan arus / energi listrik pada setiap ruangan. Hal ini dilakukan agar
tabel 3.2.
32
Proses akses kontrol pada halaman rooms ditunjukkan melalui activity
33
Pada proses kontrol halaman rooms user perlu melakukan login terlebih
dahulu sebagai proses autentikasi untuk memperoleh hak akses dari sistem untuk
masuk ke halaman rooms yang telah ditentukan untuk setiap user. Sehingga user
melalui sistem website yang dibangun. Setelah user berhasil melakukan login
system akan mengirim informasi user sebagai response bagi client dalam bentuk
token dengan format json web token (JWT). Token tersebut akan tersimpan ke
dalam local storage sebagai parameter session aktivitas user. Setelah itu website
secara otomatis akan mengarahkan user pada halaman rooms yang telah ditentukan
untuk user.
bar
34
memperoleh kemudian berwarna kuning bila lampu
35
Halaman profile berisi informasi user yang diperoleh dari token yang
dikirim oleh server sebagai response aktifitas entities halaman login yang dilakukan
oleh user.
halaman profile pada tombol profile pada akun user pada halaman
perubahan data pada atau karakter pada form berhasil atau gagal
36
Gambar 3.16 Activity Diagram Proses Kontrol Pada Halaman config
Pada akses halaman config terdapat beberapa fitur yang hanya bisa diakses
oleh user dengan role admin pada use case entities ini pengguna diberi otoritas
untuk menambah, merubah, atau pun menghapus user yang akan diberi otoritas
tabel 3.5
37
Tabel 3.5 Tabel Pengujian Black-Box Akses Halaman config
No Aksi Masukan Keluaran
klik submit
software apache jmeter pada sistem yang telah dibuat. Paramater pengujian
38
3.7.1 Pengujian Respon Time
Respon Time. Jmeter akan memberikan nilai interval waktu pada saat
kemudian dilakukan perhitungan nilai rata – rata Respon time atau Average
time.
setiap request
1 1
𝑎𝑣𝑒𝑟𝑎𝑔𝑒 = ∑𝑛𝑖=1 𝑎𝑖 = (𝑎1 + 𝑎2 + ⋯ + 𝑎𝑛 ) (3. 1)
𝑛 𝑛
transaksi yang dapat dilakukan dalam waktu tertentu atau TPS (transaction
per second).
39
Dalam melakukan pengujian throughput sistem diuji dengan
𝑗𝑢𝑚𝑙𝑎ℎ 𝑟𝑒𝑞𝑢𝑒𝑠𝑡
Throughput = ( 3. 2)
𝑡𝑜𝑡𝑎𝑙 𝑤𝑎𝑘𝑡𝑢
𝑗𝑢𝑚𝑙𝑎ℎ 𝑟𝑒𝑞𝑢𝑒𝑠𝑡
Throughput = 𝑟𝑎𝑡𝑎−𝑟𝑎𝑡𝑎 𝑤𝑎𝑘𝑡𝑢 𝑥 𝑗𝑢𝑚𝑙𝑎ℎ 𝑟𝑒𝑞𝑢𝑒𝑠𝑡 (3. 3)
40
dalam activity diagram untuk menganalisa kemampuan sistem dalam
tujuan untuk mengetahui sejauh mana kualitas dari sistem yang dibangun,
Sangat Setuju = 1
Setuju = 2
Cukup Setuju = 3
Biasa saja = 4
Kurang Setuju = 5
Tidak setuju = 6
dipahami
41
Berdasarkan data hasil kuisioner tersebut, dapat dicari persentase
𝑃
𝑌 = 𝑄 × 100% (3.4)
Keterangan:
Q = Jumlah Responden
Y = Nilai persentase
42
BAB IV
sistem website dengan percobaan pada dua kondisi yang berbeda yaitu pada
saat sistem tidak menggunakan service worker dan pada saat sistem
1 1 565 312.2
2 50 565.264 474.91
43
10 800 1740.8 1026.48
3500
3000
2500
2000
1500
1000
500
0
Jumlah Thread
Gambar 4.1 Grafik waktu rata-rata Respon Time pada akses halaman
url/index website
44
bahwa waktu akses rata-rata (respon time) yang dibutuhkan untuk website
index sistem web mulai dari thread 1 sampai dengan thread 1500
index yang ditunjukkan gambar 4.1 menunjukkan bahwa sistem yang dibuat
kecepatan akses yang lebih rendah (cepat) dibanding dengan sistem yang
terjadi ketika sistem diakses pada jumlah thread 500 hingga 1500.
tentang Performance Website, jika website ter-load lebih dari 3 detik maka
lebih dari 50% user akan menutup atau mengabaikan website tersebut. Atau
dengan kata lain peroforma website kurang optimal. Sedangkan pada sistem
rata-rata akses dari thread 1 sampai dengan 1500 adalah kurang dari 3 detik.
Hasil pengujian respon time pada saat akses halaman create user
sistem website dengan percobaan pada dua kondisi yang berbeda yaitu pada
45
saat sistem tidak menggunakan service worker dan pada saat sistem
Tabel 4.2 Hasil Pengujian rata-rata Resppon Time Akses Halaman create
user.
Jumlah Tidak Menggunakan Menggunakan
1 1 521.3 674.7
2 50 680.15 679.42
46
16 1400 3226.87 1787.2
3500
3000
2500
2000
1500
1000
500
0
Jumlah Thread
Gambar 4.2 Grafik waktu rata-rata Respon Time pada akses halaman
create user.
bahwa waktu akses rata-rata (respon time) yang dibutuhkan untuk website
user mulai dari thread 1 sampai dengan thread 1500 menghasilkan angka
worker.
47
Pada grafik pengujian rata-rata respon time akses halaman create
user yang ditunjukkan gambar 4.2 menunjukkan bahwa sistem yang dibuat
kecepatan akses yang lebih rendah (cepat) dibanding dengan sistem yang
terjadi ketika sistem diakses pada jumlah thread 500 hingga 1500.
tentang Performance Website, jika website ter-load lebih dari 3 detik maka
lebih dari 50% user akan menutup atau mengabaikan website tersebut. Atau
dengan kata lain peroforma website kurang optimal. Sedangkan pada sistem
rata-rata akses dari thread 1 sampai dengan 1500 adalah kurang dari 3 detik.
sistem website dengan percobaan pada dua kondisi yang berbeda yaitu pada
saat sistem tidak menggunakan service worker dan pada saat sistem
48
Tabel 4.3 Hasil Pengujian rata-rata Throughput Akses Halaman
url/index.
Tidak
1 1 1.76 3.9
2 50 73.47 86.44
49
Gambar 4.3 menunjukkan grafik throughput pengujian akses halaman
300
250
200
150
100
50
0
Jumlah Thread
Gambar 4.3 Throughput dengan dan tanpa service worker saat akses
halaman url/index.
pada akses url website, throughput yang dihasilkan dari website tanpa
sistem website dengan percobaan pada dua kondisi yang berbeda yaitu pada
50
saat sistem tidak menggunakan service worker dan pada saat sistem
1 1 1.91 1.47
2 50 50.3 70.43
51
16 1400 221.16 202.04
300
250
200
150
100
50
0
Axis Title
Gambar 4.4 Throughput dengan dan tanpa service worker saat akses
akses halaman create, throughput yang dihasilkan dari website tanpa service
sehingga mampu melakukan proses request yang lebih besar dalam satuan waktu.
52
4.3 Pengujian Load Time Pada Web Browser
masing web.
53
Tabel 4.6 Tabel Hasil Pengujian load time dengan cache
Percobaan Menggunakan Service Tidak Menggunakan
Worker Service Worker
1 2.698 2.768
2 2.716 2.879
3 2.644 2.758
4 2.546 2.663
5 2.57 2.782
6 2.732 2.845
7 2.749 2.96
8 2.669 2.922
9 2.569 2.656
10 2.686 2.754
Rata-rata 2.6579 2.8005
index website berdasarkan nilai rata-rata tabel 4.5 dan data tabel 4.6.
20
15
10
0
1 2 3 4 5 6 7 8 9 10 11
54
Pengambilan data dilakukan dengan menghitung jumlah resource yang
terhadap file yang tersimpan di dalam cache pada web browser untuk
yang menunjukkan rata – rata load event pada saat website pertama kali di
akses akan menghasilkan waktu yang tinggi untuk masig – masing web.
disebabkan karena browser telah melakukan cache pada saat akses pertama
Dari data tabel 4.5 menunjukkan nilai load event time yang lebih
besar pada sistem yang menggunakan service worker saat pertama kali
55
worker. Hal ini disebabkan karena web yang menggunakan service worker
melakukan cache yang lebih banyak terhadap resource yang diterima dari
sehingga menghasilkan waktu yang lebih besar. Namun untuk akses web
yang ke dua load event time yang dibutuhkan jauh lebih cepat dibandingkan
waktu akses pertama hal ini disebabkan karena web browser akan
mengakses resource yang tersimpan di alam cache yang dilakukan oleh web
web browser lebih besar pada web yang menggunakan service worker
dibanding jumlah resource yang diterima web browser pada web yang tidak
menghasilkan jumlah item yang lebih banyak serta kapasitas item cache
yang lebih besar. Hal ini yang mempengaruhi load event time pada web
browser untuk akses pertama pada web yang menggunakan service worker
jauh lebih besar dibanding web yang tidak menggunakan service worker.
56
yang diharapkan pada penjabaran tabel 3.1. Hasil pengujian ditunjukkan
sistem yang dibuat berhasil menampilkan seluruh informasi yang ada yaitu
(KwH) dalam bentuk bar charts. Hal ini telah sesuai dengan rancangan
pada penjabaran tabel 3.2. Hasil pengujian ditunjukkan pada tabel 4.6.
57
Tabel 4.9 Tabel Hasil Pengujian Black-Box Akses Halaman charts
Hasil Pengujian
No Aksi Masukan Keluaran
Black-box
(Kwh) dalam bentuk bar charts untuk masing-masing lantai yang ada pada
Hasanuddin. Hal ini telah sesuai dengan rancangan sistem yang diharapkan.
pada penjabaran tabel 3.3. Hasil pengujian ditunjukkan pada tabel 4.7.
58
Tabel 4.10 Tabel Hasil Pengujian Black-Box Akses Halaman rooms
Hasil Pengujian
No Aksi Masukan Keluaran
Black-box
terdapat navigation
pada bar
navigation
bar
59
3 User Masukan Memunculkan Pengujian berhasil
aksi On / Off pada lampu ruangan yang terhubung ke sistem setelah user
berhasil melakukan login terlebih dahulu. Hal ini telah sesuai dengan
pada penjabaran tabel 3.4. Hasil pengujian ditunjukkan pada tabel 4.8.
60
Tabel 4.11 Tabel Hasil Pengujian Black-Box Akses Halaman profile
Hasil Pengujian
No Aksi Masukan Keluaran
Black-box
bar profile
profile
mengupdate
data ke server
61
Berdasarkan pengujian black-box akses halaman profile, sistem
akses kepada user untuk melakukan perubahan data pada akun pribadi user.
pada penjabaran tabel 3.5. Hasil pengujian ditunjukkan pada tabel 4.9.
config config
62
pada halaman form yang tersedia, pada halaman user pada halaman
user yang akan menggunakan sistem yang dibuat. Hal ini telah sesuai
dihitung nilainya yang terdiri dari 6 pertanyaan yang diajukan kepada dosen-dosen
1 Sangat Setuju 3 20
1 2 Setuju 7 46,7
63
3 Cukup Setuju 5 33,3
4 Biasa Saja 0 0
5 Kurang Setuju 0 0
6 Tidak Setuju 0 0
JUMLAH 15 100
Setuju, 7 atau 46,7% memilih Setuju, dan 5 atau 33,3% memilih Cukup
anda?
2 Setuju 8 53,4
4 Biasa Saja 0 0
64
5 Kurang Setuju 0 0
6 Tidak Setuju 0 0
JUMLAH 15 100
Setuju, 2 atau 13,3% memilih Cukup Setuju, dan 5 atau 33,3% memilih
listrik.
2 Setuju 7 46,7
3 Cukup Setuju 3 20
3 4 Biasa Saja 0 0
5 Kurang Setuju 0 0
6 Tidak Setuju 0 0
JUMLAH 15 100
65
Berdasarkan hasil persentase diatas maka dapat disimpulkan
Cukup Setuju, dan 3 atau 20% memilih Setuju bahwa informasi yang
1 Sangat Setuju 0 0
2 Setuju 14 93,3
4 4 Biasa Saja 0 0
5 Kurang Setuju 0 0
6 Tidak Setuju 0 0
JUMLAH 15 100
sebanyak 14 atau 93,3% Setuju, dan 1 atau 6,7% Cukup Setuju, bahwa
5. Apakah anda setuju website ini dapat digunakan dengan mudah dan
66
Tabel 4.17. Hasil Pengujian kuisioner nomor 5
1 Sangat Setuju 0 0
2 Setuju 13 86,7
3 Cukup Setuju 0 0
5 Kurang Setuju 0 0
6 Tidak Setuju 0 0
JUMLAH 15 100
sebanyak 13 atau 86,7% Setuju, dan 2 atau 13,3% Biasa Saja bahwa website
dapat digunakan dengan mudah dan cepat (loading dari website hampir
tidak ada).
67
BAB V
PENUTUP
5.1 KESIMPULAN
Berdasarkan hasil yang telah dilakukan dalam penelitian tugas akhir yang
framework angular pada sistem monitoring energi listrik berbasis web. Maka dapat
disimpulkan :
menunjukkan perbedaan yang signifikan dari data respon time, dan data
68
5.2 SARAN
yang berberda.
indikator yang berbeda seperti penggunaan resource pada CPU dan RAM,
service worker.
69
DAFTAR PUSTAKA
https://www.liputan6.com/tekno/read/3636381/dukung-gaya-hidup-
digital-bagaimana-nasib-pengguna-2g-telkomsel.
Apps.”
http://lkpp.unhas.ac.id/pages-id-7-akreditasi-program-s1.xhtml.
70
M. Gaunt. 2018, “Service Workers: An Introduction”. Diakses pada 15 Juni 2019,
dari https://developers.google.com/web/fundamentals/primers/service-
workers/.
P. Dariye. 2018. “A Case for Progressive Web Applications” Diakses pada tanggal
progressive-web-applications-in-2017-dafb5957e783.
Pranata, Reindy Gerian, dan Arif Gunawan, dan Muhammad Diono, 2015. "Sistem
LAN".
103.
Applications”.
71
Automated HTML5 Offline Services to Overcome Low Reliability of
no. September.
Z. Tahir, 2015 . “The Analysis of Automated HTML5 Offline Services ( AHOS ),”
pp. 62–66.
72
LAMPIRAN
LAMPIRAN 1
Konfigurasi Service worker
{
"index": "/index.html",
"assetGroups": [
{
"name": "app-components",
"installMode": "prefetch",
"resources": {
"files": [
"/favicon.ico",
"/index.html",
"/*.css",
"/*.js"
]
}
}, {
"name": "asset",
"installMode": "lazy",
"updateMode": "prefetch",
"resources": {
"files": [
"/assets/**",
"/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)"
]
}
}
],
73
"dataGroups": [{
"name": "base-api",
"urls": [
"/"
],
"cacheConfig": {
"strategy": "freshness",
"maxSize": 100,
"maxAge": "10s",
"timeout": "5s"
}
}
]
}
74
LAMPIRAN 2
Routing SPA Angular
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AuthGuard } from './auth.guard';
// Import Containers
import { DefaultLayoutComponent } from './containers';
import { P404Component } from './views/error/404.component';
import { P500Component } from './views/error/500.component';
import { _logOutComponent } from './_logOut.component';
75
title: 'Page 500'
}
},
{
path: 'logout',
component: _logOutComponent,
data: {
title: 'Page 500'
}
},
{
path: '',
component: DefaultLayoutComponent,
data: {
title: 'Home'
},
children: [
{
path: 'charts',
loadChildren: './views/chartjs/chartjs.module#ChartJSModule',
},
{
path: 'dashboard',
loadChildren: './views/dashboard/dashboard.module#DashboardModule',
},
{
path:'floor1',
loadChildren:'./views/floor/floor1/floor1.module#Floor1Module',
},
76
{
path:'floor2',
loadChildren:'./views/floor/floor2/floor2.module#Floor2Module',
},
{
path:'floor3',
loadChildren:'./views/floor/floor3/floor3.module#Floor3Module',
},
{
path: 'user',
loadChildren: './views/user/user.module#UserModule',
canActivate: [AuthGuard]
},
{
path: 'config',
loadChildren: './views/config/config.module#ConfigModule',
canActivate: [AuthGuard]
},
]
}
];
@NgModule({
imports: [ RouterModule.forRoot(routes) ],
exports: [ RouterModule ]
})
export class AppRoutingModule {}
77
LAMPIRAN 3
Angular Service untuk mengatur business logic pada halaman rooms
78
LAMPIRAN 4
Angular Service untuk mengatur business logic session, authentication, dan
79
nama_lengkap: new FormControl(''),
gender: new FormControl('male'),
room_id: new FormControl(''),
level: new FormControl('', Validators.required),
/*5cd121ef39bbb37c33e1faec*/
});
initializeUserForm(){
this.userForm.setValue({
$key: null,
username: '',
password: '',
email: '',
nama_lengkap: '',
gender: 'male'
})
}
initializeFormGroup() {
this.form.setValue({
80
$key: null,
username: '',
password: '',
email: '',
nama_lengkap: '',
gender: 'male',
room_id: '',
level: ''
});
}
loginUser(userData){
return this.http.post<any>(`${this._uri}/login`, userData)
}
81
logoutUser(id){
return this.http.get(`${this._uri}/logout/${id}`);
}
updateUser(userData){
return this.http.post<any>(`${this._uri}/updateUser`, userData)
}
getAllUser(){
return this.http.get(`${this._uri}/getAllUser`);
}
getAllRooms(){
return this.http.get(`${this._uri}/getAllRooms`);
}
getEditUser(id){
return this.http.get(`${this._uri}/getEditUser/${id}`);
}
updateData(id, username, password, nama_lengkap, email, gender, room_id, level
){
const updateData = {
username : username,
password : password,
nama_lengkap : nama_lengkap,
email : email,
gender : gender,
room_id: room_id,
level : level
};
return this.http.post(`${this._uri}/updateUser/${id}`, updateData);
}
82
deleteData(id){
return this.http.get(`${this._uri}/deleteUser/${id}`);
}
83
LAMPIRAN 5
Halaman Container
@Component({
selector: 'app-dashboard',
templateUrl: './default-layout.component.html'
})
export class DefaultLayoutComponent implements OnInit {
public navItems = navItems;
public navItems2 = navItems2;
public navItems3 = navItems3;
public sidebarMinimized = true;
private changes: MutationObserver;
public element: HTMLElement = document.body;
loginUserData = {};
dataObjek$;
tokenObjek$;
84
this.sidebarMinimized=document.body.classList.contains('sidebar-
minimized')
});
this.changes.observe(<Element>this.element, {
attributes: true
});
}
ngOnInit(){
if(this._authService.loggedIn()){
let token = localStorage.getItem("token");
this.tokenString(token);
}
}
loginUser(){
this._authService.loginUser(this.loginUserData)
.subscribe(
res => {
let tokenResult = res.token; //mengambil token dari .send({token})
this.tokenString(tokenResult);
},
err => console.log(err),
)
}
logout(id){
this._authService.logoutUser(id).subscribe(()=>{
})
localStorage.clear();
this._router.navigate(['/dashboard'])
85
}
tokenString(tokenResult){
if(this._authService.loggedIn() != true){
let floor = tokenParser[0].room_id.lantai;
let room = tokenParser[0].room_id.ruangan;
let level = tokenParser[0].level;
this.dataObjek$ = tokenParser;
if (level == 'sa') {
localStorage.setItem('tokenSa', tokenResult);
this._router.navigate([`/config`]);
}else{
localStorage.setItem('token', tokenResult)
this._router.navigate([`/floor${floor}/${room}/${room}`]);
}
}
};
}
86
LAMPIRAN 6
Halaman Charts untuk menampilkan data penggunaan energy listrik secara
realtime.
chart;
chart1;
constructor(){}
ngOnInit(){
socket.on('data1', (res) => {
this.updateChartData(this.chart, res, 0);
})
socket.on('data2', (res) => {
this.updateChartData(this.chart, res, 1);
87
})
data: {
labels: [],
datasets: [
{
/*[dataSetIndex]=0*/
type: 'bar',
label: 'Lampu 1',
data: [],
backgroundColor: 'rgba(255,0,255,0.4)',
borderColor: 'rgba(255,0,255,0.4)',
fill: true,
},
{
88
/*[dataSetIndex]=1*/
type: 'bar',
label:'AC',
data: [],
backgroundColor: 'rgba(86,235,160,1)',
borderColor: 'rgba(0,0,255,0.4)',
fill: false,
},
{
/*[dataSetIndex]=1*/
type: 'bar',
label:'Lampu 2',
data: [],
backgroundColor: 'rgba(0,0,255,0.4)',
borderColor: 'rgba(0,0,255,0.4)',
fill: false,
}
]
}
});
89
},
data: {
labels: [],
datasets: [
{
/*[dataSetIndex]=0*/
type: 'bar',
label: 'Lampu 1',
data: [],
backgroundColor: 'rgba(255,0,255,0.4)',
borderColor: 'rgba(255,0,255,0.4)',
fill: true,
},
{
/*[dataSetIndex]=1*/
type: 'bar',
label:'AC',
data: [],
backgroundColor: 'rgba(86,235,160,1)',
borderColor: 'rgba(0,0,255,0.4)',
fill: false,
},
{
/*[dataSetIndex]=1*/
type: 'bar',
label:'Lampu 2',
data: [],
backgroundColor: 'rgba(0,0,255,0.4)',
90
borderColor: 'rgba(0,0,255,0.4)',
fill: false,
}
]
}
});
let options = {
// aspectRatio: 1,
// legend: false,
tooltips: false,
elements: {
point: {
borderWidth: function (context) {
return Math.min(Math.max(1, context.datasetIndex + 1), 8);
},
hoverBackgroundColor: 'transparent',
hoverBorderColor: function (context) {
return "red";
},
hoverBorderWidth: function (context) {
var value = context.dataset.data[context.dataIndex];
return Math.round(8 * value.v / 1000);
},
radius: function (context) {
var value = context.dataset.data[context.dataIndex];
var size = context.chart.width;
var base = Math.abs(value.v) / 1000;
return (size / 24) * base;
91
}
}
}
};
}
result.forEach(function(key){
let getTime = key._id;
let getArus = key.data;
let label = getTime.substring(11,20);
let countKwh = (getArus*360)/1000; //arus x tegangan(dalam hitungan 1
jam) bagi 1000(kwh)
let arus = countKwh.toFixed(2);
dataArus.push(arus);
dataLabel.push(label);
})
chart.data.datasets[dataSetIndex].data = dataArus;
chart.data.labels = dataLabel;
chart.update();
}
}
92
LAMPIRAN 7
Halaman rooms untuk melakukan controlling penggunaan energi listrik pada
ruangan.
@Component({
templateUrl: 'co_1f_4.component.html'
})
export class Co_1f_4Component implements OnInit, OnDestroy {
ngOnInit(){
93
this.fetchDataItem();
// interval length in miliseconds
this.interval = setInterval(() => {
this.sendOfflineData();
}, 10000);
}
sendOfflineData(){
let state = JSON.parse(localStorage.getItem("offline"));
let command = JSON.parse(localStorage.getItem("offlineCommand"));
console.log("state offline: ", state);
console.log("command offline: ", command);
if (state || command) {
// console.log("ada state offline");
let id = state[0]._id;
let statusId = state[0].status;
let node_id = command[0].node_id;
let pin_id = command[0].pin_id;
let status_id = command[0].status;
94
res = console.log(res);
// content.setAttribute('class',"");
console.log("item_Off");
localStorage.removeItem('offlineCommand');
}, (error)=>{
error = console.log("ada command offline");
})
this.fetchDataItem();
}else{
console.log("tidak ada state & command offline");
this.fetchDataItem();
}
}
fetchDataItem(){
this._activeRoute.params.subscribe(params => {
this._dataService.getRoomById(params.room).subscribe((res) => {
localStorage.setItem("info", JSON.stringify(res));
this.nodeStatus(res)
}, (bad) => {
let local = localStorage.getItem('info');
let getInfo = JSON.parse(local);
this.nodeStatus(getInfo);
})
});
}
nodeStatus(params){
// get data using parameters binding
95
let content1 = document.getElementById("lampOne");
let content2 = document.getElementById("lampTwo");
let content3 = document.getElementById("ac");
if (params[0].status == "0"){
content1.setAttribute('class','active');
// console.log("lamp_1_On");
}else{
content1.setAttribute('class',"");
// console.log("lamp_1_Off")
};
if (params[1].status == "0"){
content2.setAttribute('class','active');
// console.log("lamp_2_On");
}else{
content2.setAttribute('class',"");
// console.log("lamp_2_Off")
};
if (params[2].status == "0"){
content3.setAttribute('class','active');
// console.log("Ac_On");
}else{
content3.setAttribute('class',"");
// console.log("Ac_Off")
};
}
96
activateItem(array, attr){
if(this._authService.loggedIn() || this._authService.adminLoggedIn()){
let local = localStorage.getItem('info');
let getInfo = JSON.parse(local);
let id = getInfo[`${array}`]._id;
let node_id = getInfo[`${array}`].node_id;
let pin_id = getInfo[`${array}`].pin_id;
this._dataService.addCurrentState(node_id, pin_id,
this.statusParams).subscribe((res) =>{
res = console.log(res);
content.setAttribute('class',"");
97
console.log("item_Off")
}, (bad)=>{
this.storeCommandLocal = [{node_id: node_id, pin_id: pin_id, status:
this.statusParams }];
console.log(this.storeCommandLocal);
localStorage.setItem('offlineCommand',
JSON.stringify(this.storeCommandLocal));
this.snackBar.open('Action failed, check your internet connection', 'OK', {
duration: 3000
});
})
};
}
ngOnDestroy(){
if (this.interval) {
clearInterval(this.interval);
}
}
98
LAMPIRAN 8
Halaman profile untuk menampilkan informasi user dan mengupdate data
99
this.tokenObjek$ = decoded
let tokenStringify = JSON.stringify(this.tokenObjek$.result)
let tokenParser = JSON.parse(tokenStringify)
this.dataObjek$ = tokenParser
this._authService.userForm.get('username').setValue(this.dataObjek$[0].username
);
this._authService.userForm.get('password').setValue(this.dataObjek$[0].password
);
this._authService.userForm.get('nama_lengkap').setValue(this.dataObjek$[0].nam
a_lengkap);
this._authService.userForm.get('email').setValue(this.dataObjek$[0].email);
this._authService.userForm.get('gender').setValue(this.dataObjek$[0].gender);
}
onUpdateUser(username, password, nama_lengkap, email, gender){
this._authService.updateData(this.dataObjek$[0]._id, username, password,
nama_lengkap, email, gender, this.dataObjek$[0].room_id,
this.dataObjek$[0].level, ).subscribe(() => {
this.snackBar.open('User Updated Succesfully', 'OK', {
duration: 3000
});
this._router.navigate([`/user`]);
});
}
onClear(){
this._authService.userForm.reset();
this._authService.initializeUserForm();
}
}
100
LAMPIRAN 9
Halaman create user level admin
import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { MatSnackBar } from '@angular/material';
import { AuthService } from '../../services/auth.service';
@Component({
templateUrl: './create.component.html' })
export class CreateComponent implements OnInit {
rooms: any =[];
constructor(public _authService : AuthService, private _router: Router, private
route: ActivatedRoute, private snackBar: MatSnackBar, private fb:FormBuilder) {
}
ngOnInit() {
this._authService.getAllRooms().subscribe((res =>{
this.rooms = res;
console.log(this.rooms);
}))
}
addDataUser(username, password, email, nama_lengkap, gender, room_id,
level){
localStorage.removeItem('userData');
this._authService.registerUser(username, password, email, nama_lengkap,
gender, room_id, level).subscribe(() =>{
this.snackBar.open('User Created', 'OK', {
duration: 3000
});
this._router.navigate(['/config']); })
}
}
101
LAMPIRAN 10
Halaman config untuk menampilkan daftar user
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { User } from './../../models/user.model';
import { AuthService } from '../../services/auth.service';
import { MatSnackBar } from '@angular/material';
@Component({
templateUrl: 'config.component.html'
})
export class ConfigComponent implements OnInit {
user : User[];
dataUser$
displayedColumns = ['nama_lengkap', 'username', 'ruangan', 'last_login',
'level', 'actions' ];
ngOnInit(){
this.fetchDataUser();
}
fetchDataUser(){
let getUserData = localStorage.getItem('userData');
if (getUserData) {
let userData = JSON.parse(getUserData);
102
this.user = userData;
console.log('data dari local');
console.log(userData);
}else{
this._authService.getAllUser().subscribe((data: User[]) => {
this.user = data;
let userStringify = JSON.stringify(this.user);
localStorage.setItem("userData", userStringify );
console.log('data dari server')
console.log(this.user)
});
}
}
editDataUser(id){
this._router.navigate([`/config/edit/${id}`]);
}
deleteDataUser(id){
this._authService.deleteData(id).subscribe(() =>{
this.snackBar.open('Selected User Deleted', 'OK', {
duration: 3000
});
localStorage.removeItem('userData');
this.fetchDataUser();
});
}
}
103
LAMPIRAN 11
this._authService.editForm.get('username').setValue(this.user.username);
this._authService.editForm.get('password').setValue(this.user.password);
this._authService.editForm.get('nama_lengkap').setValue(this.user.nama_l
engkap);
this._authService.editForm.get('email').setValue(this.user.email);
104
this._authService.editForm.get('gender').setValue(this.user.gender);
this._authService.editForm.get('room_id').setValue(this.user.room_id);
this._authService.editForm.get('level').setValue(this.user.level);
});
});
this._authService.getAllRooms().subscribe((res =>{
this.rooms = res;
console.log(this.rooms);
})
);
}
updateDataUser(username, password, nama_lengkap, email, gender,
room_id, level){
localStorage.removeItem("userData");
this._authService.updateData(this.id, username, password, nama_lengkap,
email, gender, room_id, level).subscribe(() => {
this.snackBar.open('User Updated Succesfully', 'OK', {
duration: 3000
});
this._router.navigate([`/config`]);
});
}
onClear(){
this._authService.editForm.reset();
this._authService.initializeFormGroup();
}
}
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119