mirror of https://github.com/MISP/misp-dashboard
Merge remote-tracking branch 'upstream/master' into multipleMerges
commit
2cc957c87e
63
README.md
63
README.md
|
@ -88,6 +88,69 @@ optional arguments:
|
||||||
The URL to connect to
|
The URL to connect to
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Deploy in production using mod_wsgi
|
||||||
|
|
||||||
|
Install Apache's mod-wsgi for Python3
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get install libapache2-mod-wsgi-py3
|
||||||
|
```
|
||||||
|
|
||||||
|
Caveat: If you already have mod-wsgi installed for Python2, it will be replaced!
|
||||||
|
|
||||||
|
```bash
|
||||||
|
The following packages will be REMOVED:
|
||||||
|
libapache2-mod-wsgi
|
||||||
|
The following NEW packages will be installed:
|
||||||
|
libapache2-mod-wsgi-py3
|
||||||
|
```
|
||||||
|
|
||||||
|
Configuration file `/etc/apache2/sites-available/misp-dashboard.conf` assumes that `misp-dashboard` is cloned into `var/www/misp-dashboard`. It runs as user `misp` in this example. Change the permissions to folder and files accordingly.
|
||||||
|
|
||||||
|
```
|
||||||
|
<VirtualHost *:8000>
|
||||||
|
ServerAdmin admin@misp.local
|
||||||
|
ServerName misp.local
|
||||||
|
|
||||||
|
DocumentRoot /var/www/misp-dashboard
|
||||||
|
|
||||||
|
WSGIDaemonProcess misp-dashboard \
|
||||||
|
user=misp group=misp \
|
||||||
|
python-home=/var/www/misp-dashboard/DASHENV \
|
||||||
|
processes=1 \
|
||||||
|
threads=15 \
|
||||||
|
maximum-requests=5000 \
|
||||||
|
listen-backlog=100 \
|
||||||
|
queue-timeout=45 \
|
||||||
|
socket-timeout=60 \
|
||||||
|
connect-timeout=15 \
|
||||||
|
request-timeout=60 \
|
||||||
|
inactivity-timeout=0 \
|
||||||
|
deadlock-timeout=60 \
|
||||||
|
graceful-timeout=15 \
|
||||||
|
eviction-timeout=0 \
|
||||||
|
shutdown-timeout=5 \
|
||||||
|
send-buffer-size=0 \
|
||||||
|
receive-buffer-size=0 \
|
||||||
|
header-buffer-size=0 \
|
||||||
|
response-buffer-size=0 \
|
||||||
|
server-metrics=Off
|
||||||
|
|
||||||
|
WSGIScriptAlias / /var/www/misp-dashboard/misp-dashboard.wsgi
|
||||||
|
|
||||||
|
<Directory /var/www/misp-dashboard>
|
||||||
|
WSGIProcessGroup misp-dashboard
|
||||||
|
WSGIApplicationGroup %{GLOBAL}
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
LogLevel info
|
||||||
|
ErrorLog /var/log/apache2/misp-dashboard.local_error.log
|
||||||
|
CustomLog /var/log/apache2/misp-dashboard.local_access.log combined
|
||||||
|
ServerSignature Off
|
||||||
|
</VirtualHost>
|
||||||
|
```
|
||||||
|
|
||||||
# License
|
# License
|
||||||
Images and logos are handmade for:
|
Images and logos are handmade for:
|
||||||
- rankingMISPOrg/
|
- rankingMISPOrg/
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
[Server]
|
||||||
|
host = localhost
|
||||||
|
port = 8001
|
||||||
|
|
||||||
[Dashboard]
|
[Dashboard]
|
||||||
#hours
|
#hours
|
||||||
graph_log_refresh_rate = 1
|
graph_log_refresh_rate = 1
|
||||||
|
|
|
@ -174,8 +174,15 @@ class Geo_helper:
|
||||||
|
|
||||||
def ip_to_coord(self, ip):
|
def ip_to_coord(self, ip):
|
||||||
resp = self.reader.city(ip)
|
resp = self.reader.city(ip)
|
||||||
lat = float(resp.location.latitude)
|
try:
|
||||||
lon = float(resp.location.longitude)
|
lat = float(resp.location.latitude)
|
||||||
|
lon = float(resp.location.longitude)
|
||||||
|
except TypeError: # No location, try to use iso_code instead
|
||||||
|
self.logger.info('no location in geIP.database response for ip: {}'.format(ip))
|
||||||
|
iso_code = resp.registered_country.iso_code #if no iso_code, throws
|
||||||
|
coord = self.country_code_to_coord[iso_code.lower()] # countrycode is in upper case
|
||||||
|
lat = float(coord['lat'])
|
||||||
|
lon = float(coord['long'])
|
||||||
# 0.0001 correspond to ~10m
|
# 0.0001 correspond to ~10m
|
||||||
# Cast the float so that it has the correct float format
|
# Cast the float so that it has the correct float format
|
||||||
lat_corrected = float("{:.4f}".format(lat))
|
lat_corrected = float("{:.4f}".format(lat))
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
import sys,os,os.path
|
||||||
|
sys.path.insert(0, os.path.dirname(__file__))
|
||||||
|
os.environ["DASH_CONFIG"] = os.path.join(os.path.dirname(__file__), "config")
|
||||||
|
from server import app as application
|
|
@ -23,6 +23,9 @@ cfg.read(configfile)
|
||||||
logger = logging.getLogger('werkzeug')
|
logger = logging.getLogger('werkzeug')
|
||||||
logger.setLevel(logging.ERROR)
|
logger.setLevel(logging.ERROR)
|
||||||
|
|
||||||
|
server_host = cfg.get("Server", "host")
|
||||||
|
server_port = cfg.getint("Server", "port")
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
redis_server_log = redis.StrictRedis(
|
redis_server_log = redis.StrictRedis(
|
||||||
|
@ -550,4 +553,4 @@ def getGenericTrendingOvertime():
|
||||||
return jsonify(data)
|
return jsonify(data)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(host='localhost', port=8001, threaded=True)
|
app.run(host=server_host, port=server_port, threaded=True)
|
||||||
|
|
Loading…
Reference in New Issue