• Kirill Smelkov's avatar
    amari.xlog: Initial draft · e0cc8a38
    Kirill Smelkov authored
    `xamari xlog` can be used to maintin extra log for an Amarisoft LTE
    service: in addition to native logs, xlog contains results of periodic
    queries done via WebSocket. For example with the following aguments
    
    	xamari xlog <wsuri>  stats/10s ue_get/3s erab_get/3s
    
    xlog will emit results of stats query - every 10 seconds, results from
    ue_get query - every 3 seconds, and similarly for erab_get query.
    
    The results are saved into xlog in JSON Lines format for easy future
    processing. For the reference below is a copy of corresponding help
    entries:
    
        xlte$ xamari help xlog
        Usage: xamari xlog [OPTIONS] <wsuri> <logspec>+
        Maintain extra log for a service.
    
        The service is queried periodically according to logspec and results are saved
        in JSON format to a file (see 'xamari help jsonlog').
    
        <wsuri> is URI (see 'xamari help websock') of an Amarisoft-service.
        <logspec> is specification of what to log. It has the following parts:
    
            <query>[<options>]/<period>
    
        The query specifies a message, that should be used to query service. For
        example "stats", "ue_get", "erab_get", ... Query part is mandatory.
    
        Options specifies additional flags for the query. Options part can be omitted.
    
        Period specifies periodicity of how often the service should be queried.
        Period is optional and defaults to 60 seconds.
    
        Example for <logspec>+:
    
            stats[samples,rf]/30s  ue_get[stats]  erab_get/10s  qos_flow_get
    
        Options:
    
            -h  --help            show this help
    
        xlte$ xamari help jsonlog
        Some commands produce logs with JSON entries. Such logs are organized with JSON
        Lines format(*) with each entry occupying one line.
    
        Logs in JSON Lines format are handy to exchange in between programs, and with
        corresponding tools, e.g. jq(+), they can be also displayed in human-readable
        form and inspected quickly.
    
        (*) https://jsonlines.org/
        (+) https://stedolan.github.io/jq/
    
    Example output:
    
    (xlte3.venv) kirr@deca:~/src/wendelin/xlte$ xamari xlog ws://localhost:9001 ue_get/3s erab_get/3s
    {"meta": {"event": "start", "time": "Wed, 19 Oct 2022 15:05:50 -0000", "generator": "xlog ws://localhost:9001 ue_get[]/3.0s erab_get[]/3.0s"}}
    {"meta": {"event": "service attach", "time": "Wed, 19 Oct 2022 15:05:51 -0000", "srv_name": "ENB", "srv_type": "ENB", "srv_version": "2022-09-16"}}
    {"message":"config_get","version":"2022-09-16","type":"ENB","name":"ENB","license_id":"d9a961c166d2d4b15249fc559cdec925efbbe942d73b143aff","license_user":"rapid.space","logs":{"layers":{"PHY":{"level":"error","max_size":0,"key":false,"crypto":false,"payload":false},"MAC":{"level":"error","max_size":0,"key":false,"crypto":false,"payload":false},"RLC":{"level":"error","max_size":0,"key":false,"crypto":false,"payload":false},"PDCP":{"level":"error","max_size":0,"key":false,"crypto":false,"payload":false},"RRC":{"level":"debug","max_size":1,"key":false,"crypto":false,"payload":false},"NAS":{"level":"debug","max_size":1,"key":false,"crypto":false,"payload":false},"S1AP":{"level":"debug","max_size":1,"key":false,"crypto":false,"payload":false},"NGAP":{"level":"error","max_size":0,"key":false,"crypto":false,"payload":false},"GTPU":{"level":"error","max_size":0,"key":false,"crypto":false,"payload":false},"X2AP":{"level":"debug","max_size":1,"key":false,"crypto":false,"payload":false},"XnAP":{"level":"error","max_size":0,"key":false,"crypto":false,"payload":false},"M2AP":{"level":"error","max_size":0,"key":false,"crypto":false,"payload":false},"LPPa":{"level":"error","max_size":0,"key":false,"crypto":false,"payload":false},"NRPPa":{"level":"error","max_size":0,"key":false,"crypto":false,"payload":false},"TRX":{"level":"error","max_size":0,"key":false,"crypto":false,"payload":false}},"bcch":false,"mib":false,"signal":false,"cch":false,"rep":false,"dci_size":false,"csi":false,"cell_meas":false,"count":8192,"rotate":250000000,"path":"/var/log/lte"},"tai":9610.092,"global_enb_id":{"plmn":"00101","enb_id_type":"macro","enb_id":107216,"enb_name":"enb1a2d0"},"cells":{"1":{"n_antenna_dl":2,"n_antenna_ul":2,"n_layer_dl":2,"n_layer_ul":1,"gain":0,"ul_disabled":false,"rf_port":0,"dl_qam":256,"ul_qam":64,"ecgi":{"plmn":"00101","eci":27447297},"n_id_cell":1,"n_rb_dl":100,"n_rb_ul":100,"dl_earfcn":38350,"ul_earfcn":38350,"band":39,"dl_freq":1890000000,"ul_freq":1890000000,"mode":"TDD","uldl_config":2,"sp_config":7,"prach_sequence_index":204,"dl_cyclic_prefix":"normal","ul_cyclic_prefix":"normal","prach_config_index":4,"prach_freq_offset":11,"delta_pucch_shift":2,"n_rb_cqi":1,"n_cs_an":0,"pucch_allocation":[{"type":"2/2a/2b","rbs":1,"n":6}],"pucch_ack_nack_start":11,"pucch_reserved_rbs":[0,0,22,0,0,0,0,22,0,0],"sr_resource_count":44,"cqi_resource_count":48,"srs_resources":{"offsets":16,"freqs":20,"total":640},"gbr":{"dl_limit":7123840,"ul_limit":1797120},"tac":1,"plmn_list":[{"plmn":"00101","reserved":false}]}},"rx_channels":[{"gain":9,"freq":1890,"port":0},{"gain":9,"freq":1890,"port":0}],"tx_channels":[{"gain":60,"freq":1890,"port":0},{"gain":60,"freq":1890,"port":0}],"rf_ports":[{"sample_rate":30720000}],"message_id":1,"time":9610.087}
    {"message":"ue_get","ue_list":[],"message_id":2,"time":9613.347}
    {"message":"erab_get","erab_list":[],"timestamp":9613704,"message_id":3,"time":9613.704}
    {"message":"ue_get","ue_list":[],"message_id":4,"time":9616.355}
    {"message":"erab_get","erab_list":[],"timestamp":9616618,"message_id":5,"time":9616.618}
    {"message":"ue_get","ue_list":[],"message_id":6,"time":9619.272}
    {"message":"erab_get","erab_list":[],"timestamp":9619547,"message_id":7,"time":9619.547}
    {"message":"ue_get","ue_list":[],"message_id":8,"time":9622.319}
    {"message":"erab_get","erab_list":[],"timestamp":9622588,"message_id":9,"time":9622.588}
    {"message":"ue_get","ue_list":[],"message_id":10,"time":9625.263}
    {"message":"erab_get","erab_list":[],"timestamp":9625663,"message_id":11,"time":9625.663}
    {"message":"ue_get","ue_list":[],"message_id":12,"time":9628.403}
    {"message":"erab_get","erab_list":[],"timestamp":9628725,"message_id":13,"time":9628.725}
    {"message":"ue_get","ue_list":[],"message_id":14,"time":9631.381}
    {"message":"erab_get","erab_list":[],"timestamp":9631798,"message_id":15,"time":9631.798}
    {"message":"ue_get","ue_list":[],"message_id":16,"time":9634.303}
    {"message":"erab_get","erab_list":[],"timestamp":9634596,"message_id":17,"time":9634.596}
    {"message":"ue_get","ue_list":[],"message_id":18,"time":9637.268}
    {"message":"erab_get","erab_list":[],"timestamp":9637568,"message_id":19,"time":9637.568}
    
        (below an UE registers with eNB)
    
    {"message":"ue_get","ue_list":[{"enb_ue_id":8,"mme_ue_id":107,"rnti":68,"cells":[{"cell_id":1}]}],"message_id":20,"time":9640.296}
    {"message":"erab_get","erab_list":[{"erab_id":5,"qci":9,"dl_total_bytes":0,"ul_total_bytes":0,"enb_ue_id":8}],"timestamp":9640831,"message_id":21,"time":9640.831}
    {"message":"ue_get","ue_list":[{"enb_ue_id":8,"mme_ue_id":107,"rnti":68,"cells":[{"cell_id":1}]}],"message_id":22,"time":9643.268}
    {"message":"erab_get","erab_list":[{"erab_id":5,"qci":9,"dl_total_bytes":0,"ul_total_bytes":0,"enb_ue_id":8}],"timestamp":9643555,"message_id":23,"time":9643.555}
    {"message":"ue_get","ue_list":[{"enb_ue_id":8,"mme_ue_id":107,"rnti":68,"cells":[{"cell_id":1}]}],"message_id":24,"time":9646.326}
    {"message":"erab_get","erab_list":[{"erab_id":5,"qci":9,"dl_total_bytes":0,"ul_total_bytes":0,"enb_ue_id":8}],"timestamp":9646850,"message_id":25,"time":9646.85}
    {"message":"ue_get","ue_list":[],"message_id":26,"time":9649.287}
    {"message":"erab_get","erab_list":[],"timestamp":9649646,"message_id":27,"time":9649.646}
    ^CTraceback (most recent call last):
      File "/home/kirr/src/wendelin/venv/xlte3.venv/bin/xamari", line 33, in <module>
        sys.exit(load_entry_point('xlte', 'console_scripts', 'xamari')())
      File "/home/kirr/src/wendelin/xlte/amari/xamari.py", line 130, in main
        return command_module.main(argv)
      File "/home/kirr/src/wendelin/xlte/amari/xlog.py", line 275, in main
        xlog(wsuri, logspecv)
      File "/home/kirr/src/wendelin/xlte/amari/xlog.py", line 108, in xlog
        xl.xlog1()
      File "/home/kirr/src/wendelin/venv/xlte3.venv/lib/python3.9/site-packages/decorator.py", line 232, in fun
        return caller(func, *(extras + args), **kw)
      File "/home/kirr/src/wendelin/venv/xlte3.venv/lib/python3.9/site-packages/golang/__init__.py", line 103, in _
        return f(*argv, **kw)
      File "/home/kirr/src/wendelin/xlte/amari/xlog.py", line 157, in xlog1
        xl._xlog1(conn)
      File "/home/kirr/src/wendelin/xlte/amari/xlog.py", line 208, in _xlog1
        time.sleep(δtsleep)
    KeyboardInterrupt
    e0cc8a38
xamari.py 3.6 KB