Changeset 467 for TFP-WebServer


Ignore:
Timestamp:
Aug 18, 2023, 12:08:10 PM (15 months ago)
Author:
alloc
Message:

21.1.16.2 WebServer release
Added "id"s to messages in log API / event
Added "baseUrl" to mods API for WebMods

Location:
TFP-WebServer
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • TFP-WebServer/WebServer/ModInfo.xml

    r465 r467  
    55        <Description value="Integrated Webserver for the Web Dashboard and server APIs" />
    66        <Author value="The Fun Pimps LLC" />
    7         <Version value="21.1.16.1" />
     7        <Version value="21.1.16.2" />
    88        <Website value="" />
    99</xml>
  • TFP-WebServer/WebServer/src/LogBuffer.cs

    r434 r467  
    1212
    1313                private int listOffset;
     14
     15                public static event Action<LogEntry> EntryAdded;
    1416
    1517                public static void Init () {
     
    6062
    6163                private void LogCallback (string _formattedMsg, string _plainMsg, string _trace, LogType _type, DateTime _timestamp, long _uptime) {
    62                         LogEntry le = new LogEntry (_timestamp, _plainMsg, _trace, _type, _uptime);
     64                        lock (logEntries) {
     65                                LogEntry le = new LogEntry (listOffset + logEntries.Count, _timestamp, _plainMsg, _trace, _type, _uptime);
    6366
    64                         lock (logEntries) {
    6567                                logEntries.Add (le);
     68                                EntryAdded?.Invoke (le);
     69                               
    6670                                if (logEntries.Count <= maxEntries) {
    6771                                        return;
     
    126130
    127131                public class LogEntry {
     132                        public readonly int MessageId;
    128133                        public readonly DateTime Timestamp;
    129134                        public readonly string IsoTime;
     
    133138                        public readonly long Uptime;
    134139
    135                         public LogEntry (DateTime _timestamp, string _message, string _trace, LogType _type, long _uptime) {
     140                        public LogEntry (int _messageId, DateTime _timestamp, string _message, string _trace, LogType _type, long _uptime) {
     141                                MessageId = _messageId;
     142                               
    136143                                Timestamp = _timestamp;
    137144                                IsoTime = _timestamp.ToString ("o");
  • TFP-WebServer/WebServer/src/SSE/EventLog.cs

    r425 r467  
    1 using System;
    21using JetBrains.Annotations;
    3 using UnityEngine;
    42using Utf8Json;
    53using Webserver.UrlHandlers;
    6 using Webserver.WebAPI;
     4using Webserver.WebAPI.APIs;
    75
    86namespace Webserver.SSE {
     
    108        public class EventLog : AbsEvent {
    119                public EventLog (SseHandler _parent) : base (_parent, _name: "log") {
    12                         Log.LogCallbacksExtended += LogCallback;
     10                        LogBuffer.EntryAdded += LogCallback;
    1311                }
    1412
    15                 private static readonly byte[] jsonMsgKey = JsonWriter.GetEncodedPropertyNameWithBeginObject ("msg");
    16                 private static readonly byte[] jsonTypeKey = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("type");
    17                 private static readonly byte[] jsonTraceKey = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("trace");
    18                 private static readonly byte[] jsonIsotimeKey = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("isotime");
    19                 private static readonly byte[] jsonUptimeKey = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("uptime");
    20 
    21                 private void LogCallback (string _formattedMsg, string _plainMsg, string _trace, LogType _type, DateTime _timestamp, long _uptime) {
    22                         string uptime = _uptime.ToString ();
    23 
     13                private void LogCallback (LogBuffer.LogEntry _logEntry) {
    2414                        JsonWriter writer = new JsonWriter ();
    25                        
    26                         writer.WriteRaw (jsonMsgKey);
    27                         writer.WriteString (_plainMsg);
    28                        
    29                         writer.WriteRaw (jsonTypeKey);
    30                         writer.WriteString (_type.ToStringCached ());
    31                        
    32                         writer.WriteRaw (jsonTraceKey);
    33                         writer.WriteString (_trace);
    34                        
    35                         writer.WriteRaw (jsonIsotimeKey);
    36                         JsonCommons.WriteDateTime (ref writer, _timestamp);
    37                        
    38                         writer.WriteRaw (jsonUptimeKey);
    39                         writer.WriteString (uptime);
    40                        
    41                         writer.WriteEndObject ();
     15                        LogApi.WriteLogMessageObject (ref writer, _logEntry);
    4216                       
    4317                        SendData ("logLine", writer.ToString ());
  • TFP-WebServer/WebServer/src/UrlHandlers/ItemIconHandler.cs

    r463 r467  
    122122                                        Log.Out ($"[Web] IconHandler: Loaded {icons.Count} icons");
    123123                                } else {
    124                                         stats?.MswTotal.Stop ();
     124                                        stats.MswTotal.Stop ();
    125125                                        Log.Out ($"[Web] IconHandler: Loaded {icons.Count} icons ({stats.Files} source images with {stats.Tints} tints applied)");
    126126                                        Log.Out ($"[Web] IconHandler: Total time {stats.MswTotal.ElapsedMilliseconds} ms, loading files {stats.MswLoading.ElapsedMilliseconds} ms, tinting files {stats.MswTinting.ElapsedMilliseconds} ms, encoding files {stats.MswEncoding.ElapsedMilliseconds} ms");
  • TFP-WebServer/WebServer/src/WebAPI/APIs/GameData/Mods.cs

    r434 r467  
    1919                                }
    2020                               
    21                                 writer.WriteBeginObject ();
    22 
    2321                                writeModJson (ref writer, webMod);
    24 
    25                                 if (webMod.ReactBundle != null || webMod.CssPath != null) {
    26                                         writer.WriteValueSeparator ();
    27 
    28                                         writer.WritePropertyName ("web");
    29                                         writer.WriteBeginObject ();
    30                                        
    31                                         string webModReactBundle = webMod.ReactBundle;
    32                                         if (webModReactBundle != null) {
    33                                                 writer.WritePropertyName ("bundle");
    34                                                 writer.WriteString (webModReactBundle);
    35                                         }
    36 
    37                                         string webModCssFile = webMod.CssPath;
    38                                         if (webModCssFile != null) {
    39                                                 if (webModReactBundle != null) {
    40                                                         writer.WriteValueSeparator ();
    41                                                 }
    42 
    43                                                 writer.WritePropertyName ("css");
    44                                                 writer.WriteString (webModCssFile);
    45                                         }
    46                                        
    47                                         writer.WriteEndObject ();
    48                                 }
    49 
    50                                 writer.WriteEndObject ();
    5122                        }
    5223
     
    5627                }
    5728
    58                 private void writeModJson (ref JsonWriter _writer, WebMod _webMod) {
     29                private static void writeModJson (ref JsonWriter _writer, WebMod _webMod) {
     30                        _writer.WriteBeginObject ();
     31
    5932                        _writer.WritePropertyName ("name");
    6033                        _writer.WriteString (_webMod.ParentMod.Name);
     
    7952                        _writer.WritePropertyName ("website");
    8053                        _writer.WriteString (_webMod.ParentMod.Website);
     54                       
     55                        writeWebModJson (ref _writer, _webMod);
     56
     57                        _writer.WriteEndObject ();
     58                }
     59
     60                private static void writeWebModJson (ref JsonWriter _writer, WebMod _webMod) {
     61                        if (_webMod.ModUrl != null) {
     62                                _writer.WriteValueSeparator ();
     63
     64                                _writer.WritePropertyName ("web");
     65                                _writer.WriteBeginObject ();
     66                               
     67                                _writer.WritePropertyName ("baseUrl");
     68                                _writer.WriteString (_webMod.ModUrl);
     69
     70                                string webModReactBundle = _webMod.ReactBundle;
     71                                if (webModReactBundle != null) {
     72                                        _writer.WriteValueSeparator ();
     73                                        _writer.WritePropertyName ("bundle");
     74                                        _writer.WriteString (webModReactBundle);
     75                                }
     76
     77                                string webModCssFile = _webMod.CssPath;
     78                                if (webModCssFile != null) {
     79                                        _writer.WriteValueSeparator ();
     80                                        _writer.WritePropertyName ("css");
     81                                        _writer.WriteString (webModCssFile);
     82                                }
     83
     84                                _writer.WriteEndObject ();
     85                        }
    8186                }
    8287
  • TFP-WebServer/WebServer/src/WebAPI/APIs/GameData/Mods.openapi.yaml

    r460 r467  
    3737          type: object
    3838          properties:
     39            baseUrl:
     40              type: string
     41              examples:
     42                - /webmods/TFP_MarkersExample/
     43              description: Base URL of the WebMod folder of this mod. Always ends with a forward slash '/'.
    3944            bundle:
    4045              type: string
    4146              examples:
    42                 - /webmods/Xample_MarkersMod/bundle.js
     47                - /webmods/TFP_MarkersExample/bundle.js
     48              description: URL of the React bundle if the mod has one.
    4349            css:
    4450              type: string
    4551              examples:
    46                 - /webmods/Xample_MarkersMod/styling.css
     52                - /webmods/TFP_MarkersExample/styling.css
     53              description: URL of a styling CSS file if the mod has one.
     54          required:
     55            - baseUrl
    4756      required:
    4857        - name
  • TFP-WebServer/WebServer/src/WebAPI/APIs/Log.openapi.yaml

    r460 r467  
    88    LogEntry:
    99      type: object
    10       properties:
     10      properties:
     11        id:
     12          type: integer
     13          minimum: 0
     14          description: Consecutive ID/number of this log line
    1115        msg:
    1216          type: string
     
    3337          examples:
    3438            - '87123'
    35           description: Time since server was started in milliseconds.
     39          description: Time since server was started in milliseconds
    3640      required:
     41        - id
    3742        - msg
    3843        - type
  • TFP-WebServer/WebServer/src/WebAPI/APIs/LogApi.cs

    r459 r467  
    1212                private static readonly byte[] jsonKeyLastLine = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("lastLine");
    1313
    14                 private static readonly byte[] jsonMsgKey = JsonWriter.GetEncodedPropertyNameWithBeginObject ("msg");
     14                private static readonly byte[] jsonIdKey = JsonWriter.GetEncodedPropertyNameWithBeginObject ("id");
     15                private static readonly byte[] jsonMsgKey = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("msg");
    1516                private static readonly byte[] jsonTypeKey = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("type");
    1617                private static readonly byte[] jsonTraceKey = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("trace");
     
    5758                                }
    5859
    59                                 writer.WriteRaw (jsonMsgKey);
    60                                 writer.WriteString (logEntry.Message);
    61 
    62                                 writer.WriteRaw (jsonTypeKey);
    63                                 writer.WriteString (logEntry.Type.ToStringCached ());
    64 
    65                                 writer.WriteRaw (jsonTraceKey);
    66                                 writer.WriteString (logEntry.Trace);
    67 
    68                                 writer.WriteRaw (jsonIsotimeKey);
    69                                 writer.WriteString (logEntry.IsoTime);
    70 
    71                                 writer.WriteRaw (jsonUptimeKey);
    72                                 writer.WriteString (logEntry.Uptime.ToString ());
    73 
    74                                 writer.WriteEndObject ();
     60                                WriteLogMessageObject (ref writer, logEntry);
    7561                        }
    7662
     
    8773                        SendEnvelopedResult (_context, ref writer);
    8874                }
     75
     76                public static void WriteLogMessageObject (ref JsonWriter _writer, LogBuffer.LogEntry _logEntry) {
     77                        _writer.WriteRaw (jsonIdKey);
     78                        _writer.WriteInt32 (_logEntry.MessageId);
     79                       
     80                        _writer.WriteRaw (jsonMsgKey);
     81                        _writer.WriteString (_logEntry.Message);
     82
     83                        _writer.WriteRaw (jsonTypeKey);
     84                        _writer.WriteString (_logEntry.Type.ToStringCached ());
     85
     86                        _writer.WriteRaw (jsonTraceKey);
     87                        _writer.WriteString (_logEntry.Trace);
     88
     89                        _writer.WriteRaw (jsonIsotimeKey);
     90                        _writer.WriteString (_logEntry.IsoTime);
     91
     92                        _writer.WriteRaw (jsonUptimeKey);
     93                        _writer.WriteString (_logEntry.Uptime.ToString ());
     94
     95                        _writer.WriteEndObject ();
     96                }
    8997        }
    9098}
  • TFP-WebServer/bin/Mods/TFP_WebServer/ModInfo.xml

    r465 r467  
    55        <Description value="Integrated Webserver for the Web Dashboard and server APIs" />
    66        <Author value="The Fun Pimps LLC" />
    7         <Version value="21.1.16.1" />
     7        <Version value="21.1.16.2" />
    88        <Website value="" />
    99</xml>
Note: See TracChangeset for help on using the changeset viewer.