changing name authored by DrBro23's avatar DrBro23
### _**Python Skript:**_
Importieren der Bibliotheken und Definieren von Variablen.
```python
import socket
import datetime
import psutil
import random
import time
from flask import Flask, g
from flask_restful import Resource, Api
app = Flask(__name__)
app.url_map.strict_slashes = False
api = Api(app)
status = {
"exec_time": "__EXECUTION_TIME__",
"status_code": "__STATUS_CODE__"
}
```
<br />
Die IP-Adresse von dem aktuell verwendeten Computer wird ausgelesen.\
Wenn keine IP Adresse ausgelesen werden kann, wird die Localhost IP von dem verwendeten Computer benutzt.\
Die IP-Adresse wird dann an die Funktion zurückgegeben.
```python
def get_ip():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
s.connect(('10.255.255.255', 1))
IP = s.getsockname()[0]
except Exception:
IP = '127.0.0.1'
finally:
s.close()
return IP
```
<br />
Ausgabe eines Textes:
```python
@app.route('/hello')
def get_hello():
return {'hello': 'world',
"status": status}
```
<br />
Ausgabe der Zeitdaten:
```python
@app.route('/time')
def get_time():
now = datetime.datetime.now()
return {"year": now.year,
"month": now.month,
"day": now.day,
"hour": now.hour,
"minute": now.minute,
"second": now.second,
"tz": time.strftime("%z", time.gmtime()),
"status": status}
```
<br />
Ausgabe der Rescourcendaten des verwendeten Computers:
```python
@app.route('/resource')
def get_resource():
return {"cpu": {
"cpu_count_real": str(psutil.cpu_count(logical=False)),
"cpu_count_logical": str(psutil.cpu_count()),
"cpu_percent": str(psutil.cpu_percent()),
"cpu_stats": dict(psutil.cpu_stats()._asdict())
},
"memory": dict(psutil.virtual_memory()._asdict()),
"status": status
}
```
<br />
Ausgabe einer Zufallszahl:
```python
@app.route('/random')
def get_random_one():
return get_random(1)
```
<br />
Ausgabe mehrerer Zufallszahlen:
<br />Hierbei wird eine Liste erstellt und die Anzahl der Zufallszeahlen abgespeichert, die der Benutzer wünscht.
Danach werden die Werte mit dem Status ausgegeben.
<br />Wertebereich zwischen 0 und 100 000.
```python
@app.route('/random/<int:amount>')
def get_random(amount):
if not(0 < amount < 100000):
return {"status": status}, 500
nums = list()
[nums.append(random.random()) for i in range(amount)]
return {"values": nums,
"status": status}
```
<br />
Durchlaufzeit:
<br />Die Anfangszeit wird in der before_request( ) Methode und die Endzeit wird in der after_request( ) Methode gemessen. Desweiteren wird in der after_request( ) Mehtode die Berechnung der Laufzeit durchgeführt, der Statuscode und die Laufzeit ausgegeben.
```python
@app.before_request
def before_request():
g.start = time.time()
@app.after_request
def after_request(response):
diff = time.time() - g.start
if (response.response):
response.set_data(response.get_data().replace(
b'__EXECUTION_TIME__', bytes(repr(diff), 'utf-8')))
response.set_data(response.get_data().replace(
b'__STATUS_CODE__', bytes(str(response.status_code), 'utf-8')))
print(diff, response)
return response
```
<br />
Hauptmethode:
Die Funktion der IP-Adresse wird aufgerufen, um diese auszulesen und der Port wird gesetzt.
Desweiteren wird der Server gestartet und die IP-Adresse und die Portnummer übergeben.
```python
def main():
ip = get_ip()
port = 9874
app.run(debug=True, host=ip, port=port)
```
<br />
Aufruf von main:
Die interne Variable `__name__` reflektiert den Namen des Momentanen Moduls in der sich die Datei befindet.
Wird das Programm über die Kommandozeile ausgeführt (e.g. außerhalb eines Moduls), ist der Name immer `"__main__"`.
```python
if __name__ == '__main__':
main()
```
\ No newline at end of file