diff --git a/app.py b/app.py
index 4a53c31..fded67e 100644
--- a/app.py
+++ b/app.py
@@ -3,9 +3,7 @@
 SPDX-License-Identifier: LicenseRef-ONF-Member-1.01
 """
 import sys
-import re
 from datetime import datetime
-import time
 
 from flask import Flask, request
 import logging as log
@@ -15,11 +13,10 @@
 from roc import Roc
 from prom import Prometheus
 from ping import ping
-import device
 
 app = Flask(__name__)
 
-devices = {} # dict imsi:device
+devices = {}  # dict imsi:device
 lock = threading.Lock()
 probe_start = threading.Event()
 probe_stop = threading.Event()
@@ -31,9 +28,10 @@
     with lock:
         all = {}
         for _, device in devices.items():
-            all[device.imsi_id] = {'ip':device.ip, 'imsi':device.imsi, 'last_reachable':'{:%Y-%m-%d %H:%M:%S}'.format(device.last_reachable)}
+            all[device.imsi_id] = {'ip': device.ip, 'imsi': device.imsi, 'last_reachable': '{:%Y-%m-%d %H:%M:%S}'.format(device.last_reachable)}
     return all
 
+
 @app.route("/devices/reachable")
 def get_devices_reachable():
     global devices, lock
@@ -41,9 +39,10 @@
         reachable = {}
         for _, device in devices.items():
             if device.reachable is True:
-                reachable[device.imsi_id] = {'ip':device.ip, 'imsi':device.imsi, 'last_reachable':'{:%Y-%m-%d %H:%M:%S}'.format(device.last_reachable)}
+                reachable[device.imsi_id] = {'ip': device.ip, 'imsi': device.imsi, 'last_reachable': '{:%Y-%m-%d %H:%M:%S}'.format(device.last_reachable)}
     return reachable
 
+
 @app.route("/devices/unreachable")
 def get_devices_unreachable():
     global devices, lock
@@ -51,14 +50,17 @@
         unreachable = {}
         for _, device in devices.items():
             if device.reachable is False:
-                unreachable[device.imsi_id] = {'ip':device.ip, 'imsi':device.imsi, 'last_reachable':'{:%Y-%m-%d %H:%M:%S}'.format(device.last_reachable)}
+                unreachable[device.imsi_id] = {'ip': device.ip, 'imsi': device.imsi, 'last_reachable': '{:%Y-%m-%d %H:%M:%S}'.format(device.last_reachable)}
     return unreachable
 
+
 @app.route("/probe")
 def probe():
     update_and_probe()
     return get_devices_reachable()
 
+
+# curl http://localhost:3333/config?period=0
 @app.route("/config")
 def config():
     global args, probe_stop
@@ -104,8 +106,21 @@
                       help="Probing period in sec",
                       type=int,
                       default=180)
+    args.add_argument("--url",
+                      help="ROC url",
+                      type=str,
+                      default="https://roc.menlo.aetherproject.org/aether-roc-api/aether/v2.0.0/connectivity-service-v2/")
+    args.add_argument("--enterprise",
+                      help="Enterprise Id",
+                      type=str,
+                      default="aether-onf")
+    args.add_argument("--site",
+                      help="Site Id",
+                      type=str,
+                      default="menlo-4g")
     return parser
 
+
 def update(roc, prom, old):
     new = roc.update_devices(old)
     if new is not None:
@@ -114,7 +129,8 @@
         new = old
     return new
 
-def probe(devices):
+
+def do_probe(devices):
     for imsi_id, device in devices.items():
         if device.ip is None:
             continue
@@ -126,13 +142,15 @@
             device.reachable = False
             log.info("{}/{}/{} - unreachable".format(device.imsi_id, device.imsi, device.ip))
 
+
 def update_and_probe():
     global devices, lock
     new = update(roc, prom, devices)
-    probe(new)
+    do_probe(new)
     with lock:
         devices = new
 
+
 def work_thread(roc, prom):
     global args
     while True:
@@ -146,6 +164,7 @@
                 probe_stop.clear()
                 break
 
+
 if __name__ == '__main__':
 
     log.basicConfig(
@@ -158,7 +177,7 @@
 
     args = build_argparser().parse_args()
 
-    roc = Roc(args.user, args.password)
+    roc = Roc(args.url, args.user, args.password, args.enterprise, args.site)
     prom = Prometheus(args.token.split(':')[0], args.token.split(':')[1])
 
     t = threading.Thread(target=work_thread, args=(roc, prom,))
