Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: pkg/analysis_server/tool/instrumentation/log/log.dart

Issue 2890193002: Make instrumentation data structure more regular (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pkg/analyzer/lib/instrumentation/instrumentation.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** 5 /**
6 * A representation of the contents of an instrumentation log. 6 * A representation of the contents of an instrumentation log.
7 */ 7 */
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:math' as math; 9 import 'dart:math' as math;
10 10
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 void _appendDetails(StringBuffer buffer) { 155 void _appendDetails(StringBuffer buffer) {
156 super._appendDetails(buffer); 156 super._appendDetails(buffer);
157 for (String component in components) { 157 for (String component in components) {
158 buffer.write(component); 158 buffer.write(component);
159 buffer.write('<br>'); 159 buffer.write('<br>');
160 } 160 }
161 } 161 }
162 } 162 }
163 163
164 /** 164 /**
165 * A log entry representing an PluginErr entry.
166 */
167 class GenericPluginEntry extends GenericEntry with PluginEntryMixin {
168 /**
169 * The components describing the plugin associated with this entry.
170 */
171 final List<String> pluginData;
172
173 /**
174 * Initialize a newly created log entry.
175 */
176 GenericPluginEntry(int index, int timeStamp, String entryKind,
177 List<String> components, this.pluginData)
178 : super(index, timeStamp, entryKind, components);
179 }
180
181 /**
165 * A representation of an instrumentation log. 182 * A representation of an instrumentation log.
166 */ 183 */
167 class InstrumentationLog { 184 class InstrumentationLog {
168 /** 185 /**
169 * The paths of the log files containing the entries. 186 * The paths of the log files containing the entries.
170 */ 187 */
171 List<String> logFilePaths; 188 List<String> logFilePaths;
172 189
173 /** 190 /**
174 * The entries in the instrumentation log. 191 * The entries in the instrumentation log.
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 _format(buffer, newIndent, element); 561 _format(buffer, newIndent, element);
545 buffer.write('<br>'); 562 buffer.write('<br>');
546 }); 563 });
547 buffer.write(indent); 564 buffer.write(indent);
548 buffer.write(']'); 565 buffer.write(']');
549 } 566 }
550 } 567 }
551 } 568 }
552 569
553 /** 570 /**
571 * A log entry representing a communication between the server and a plugin.
572 */
573 abstract class JsonBasedPluginEntry extends JsonBasedEntry
574 with PluginEntryMixin {
575 /**
576 * The components describing the plugin associated with this entry.
577 */
578 final List<String> pluginData;
579
580 /**
581 * Initialize a newly created entry to have the given [timeStamp] and
582 * [notificationData] and to be associated with the plugin with the given
583 * [pluginData].
584 */
585 JsonBasedPluginEntry(
586 int index, int timeStamp, Map notificationData, this.pluginData)
587 : super(index, timeStamp, notificationData);
588 }
589
590 /**
554 * A single entry in an instrumentation log. 591 * A single entry in an instrumentation log.
555 */ 592 */
556 abstract class LogEntry { 593 abstract class LogEntry {
557 /** 594 /**
558 * The character used to separate fields within an entry. 595 * The character used to separate fields within an entry.
559 */ 596 */
560 static final int fieldSeparator = ':'.codeUnitAt(0); 597 static final int fieldSeparator = ':'.codeUnitAt(0);
561 598
562 /** 599 /**
563 * A regular expression that will match the beginning of a valid log entry. 600 * A regular expression that will match the beginning of a valid log entry.
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 } else if (entryKind == InstrumentationService.TAG_FILE_READ) { 669 } else if (entryKind == InstrumentationService.TAG_FILE_READ) {
633 // Fall through 670 // Fall through
634 } else if (entryKind == InstrumentationService.TAG_LOG_ENTRY) { 671 } else if (entryKind == InstrumentationService.TAG_LOG_ENTRY) {
635 // Fall through 672 // Fall through
636 } else if (entryKind == InstrumentationService.TAG_NOTIFICATION) { 673 } else if (entryKind == InstrumentationService.TAG_NOTIFICATION) {
637 Map requestData = JSON.decode(components[2]); 674 Map requestData = JSON.decode(components[2]);
638 return new NotificationEntry(index, timeStamp, requestData); 675 return new NotificationEntry(index, timeStamp, requestData);
639 } else if (entryKind == InstrumentationService.TAG_PERFORMANCE) { 676 } else if (entryKind == InstrumentationService.TAG_PERFORMANCE) {
640 // Fall through 677 // Fall through
641 } else if (entryKind == InstrumentationService.TAG_PLUGIN_ERROR) { 678 } else if (entryKind == InstrumentationService.TAG_PLUGIN_ERROR) {
642 return new PluginErrorEntry( 679 return new PluginErrorEntry(index, timeStamp, entryKind,
643 index, timeStamp, entryKind, components[2], components.sublist(3)); 680 components.sublist(2, 4), components.sublist(4));
644 } else if (entryKind == InstrumentationService.TAG_PLUGIN_EXCEPTION) { 681 } else if (entryKind == InstrumentationService.TAG_PLUGIN_EXCEPTION) {
645 return new PluginExceptionEntry( 682 return new PluginExceptionEntry(index, timeStamp, entryKind,
646 index, timeStamp, entryKind, components[2], components.sublist(3)); 683 components.sublist(2, 5), components.sublist(5));
647 } else if (entryKind == InstrumentationService.TAG_PLUGIN_NOTIFICATION) { 684 } else if (entryKind == InstrumentationService.TAG_PLUGIN_NOTIFICATION) {
648 Map requestData = JSON.decode(components[3]); 685 Map requestData = JSON.decode(components[2]);
649 return new PluginNotificationEntry( 686 return new PluginNotificationEntry(
650 index, timeStamp, components[2], requestData); 687 index, timeStamp, requestData, components.sublist(3));
651 } else if (entryKind == InstrumentationService.TAG_PLUGIN_REQUEST) { 688 } else if (entryKind == InstrumentationService.TAG_PLUGIN_REQUEST) {
652 Map requestData = JSON.decode(components[3]); 689 Map requestData = JSON.decode(components[2]);
653 return new PluginRequestEntry( 690 return new PluginRequestEntry(
654 index, timeStamp, components[2], requestData); 691 index, timeStamp, requestData, components.sublist(3));
655 } else if (entryKind == InstrumentationService.TAG_PLUGIN_RESPONSE) { 692 } else if (entryKind == InstrumentationService.TAG_PLUGIN_RESPONSE) {
656 Map responseData = JSON.decode(components[3]); 693 Map responseData = JSON.decode(components[2]);
657 return new PluginResponseEntry( 694 return new PluginResponseEntry(
658 index, timeStamp, components[2], responseData); 695 index, timeStamp, responseData, components.sublist(3));
659 } else if (entryKind == InstrumentationService.TAG_PLUGIN_TIMEOUT) { 696 } else if (entryKind == InstrumentationService.TAG_PLUGIN_TIMEOUT) {
660 return new PluginErrorEntry( 697 return new PluginErrorEntry(index, timeStamp, entryKind,
661 index, timeStamp, entryKind, components[2], components.sublist(3)); 698 components.sublist(2, 3), components.sublist(3));
662 } else if (entryKind == InstrumentationService.TAG_REQUEST) { 699 } else if (entryKind == InstrumentationService.TAG_REQUEST) {
663 Map requestData = JSON.decode(components[2]); 700 Map requestData = JSON.decode(components[2]);
664 return new RequestEntry(index, timeStamp, requestData); 701 return new RequestEntry(index, timeStamp, requestData);
665 } else if (entryKind == InstrumentationService.TAG_RESPONSE) { 702 } else if (entryKind == InstrumentationService.TAG_RESPONSE) {
666 Map responseData = JSON.decode(components[2]); 703 Map responseData = JSON.decode(components[2]);
667 return new ResponseEntry(index, timeStamp, responseData); 704 return new ResponseEntry(index, timeStamp, responseData);
668 } else if (entryKind == InstrumentationService.TAG_SUBPROCESS_START) { 705 } else if (entryKind == InstrumentationService.TAG_SUBPROCESS_START) {
669 // Fall through 706 // Fall through
670 } else if (entryKind == InstrumentationService.TAG_SUBPROCESS_RESULT) { 707 } else if (entryKind == InstrumentationService.TAG_SUBPROCESS_RESULT) {
671 // Fall through 708 // Fall through
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 if (parameters is Map) { 863 if (parameters is Map) {
827 return parameters[parameterName]; 864 return parameters[parameterName];
828 } 865 }
829 return null; 866 return null;
830 } 867 }
831 } 868 }
832 869
833 /** 870 /**
834 * A log entry representing a communication between the server and a plugin. 871 * A log entry representing a communication between the server and a plugin.
835 */ 872 */
836 abstract class PluginEntry extends JsonBasedEntry with PluginEntryMixin {
837 /**
838 * The id of the plugin being communicated with.
839 */
840 final String pluginId;
841
842 /**
843 * Initialize a newly created entry to have the given [timeStamp] and
844 * [notificationData] and to be associated with the plugin with the given
845 * [pluginId].
846 */
847 PluginEntry(int index, int timeStamp, this.pluginId, Map notificationData)
848 : super(index, timeStamp, notificationData);
849 }
850
851 /**
852 * A log entry representing a communication between the server and a plugin.
853 */
854 abstract class PluginEntryMixin { 873 abstract class PluginEntryMixin {
855 /** 874 /**
856 * The id of the plugin being communicated with. 875 * The components describing the plugin associated with this entry.
857 */ 876 */
858 String get pluginId; 877 List<String> get pluginData;
878
879 /**
880 * The id of the plugin associated with this entry.
881 */
882 String get pluginId => pluginData[0];
883
884 /**
885 * The name of the plugin associated with this entry.
886 */
887 String get pluginName => pluginData[1];
888
889 /**
890 * The version of the plugin associated with this entry.
891 */
892 String get pluginVersion => pluginData[2];
859 893
860 /** 894 /**
861 * Return a shortened version of the plugin id. 895 * Return a shortened version of the plugin id.
862 */ 896 */
863 String get shortPluginId { 897 String get shortPluginId {
864 int index = pluginId.lastIndexOf(path.separator); 898 int index = pluginId.lastIndexOf(path.separator);
865 if (index > 0) { 899 if (index > 0) {
866 return pluginId.substring(index + 1); 900 return pluginId.substring(index + 1);
867 } 901 }
868 return pluginId; 902 return pluginId;
869 } 903 }
870 } 904 }
871 905
872 /** 906 /**
873 * A log entry representing an PluginErr entry. 907 * A log entry representing an PluginErr entry.
874 */ 908 */
875 class PluginErrorEntry extends GenericEntry with PluginEntryMixin { 909 class PluginErrorEntry extends GenericPluginEntry {
876 /**
877 * The id of the plugin that generated the error.
878 */
879 final String pluginId;
880
881 /** 910 /**
882 * Initialize a newly created log entry. 911 * Initialize a newly created log entry.
883 */ 912 */
884 PluginErrorEntry(int index, int timeStamp, String entryKind, this.pluginId, 913 PluginErrorEntry(int index, int timeStamp, String entryKind,
885 List<String> components) 914 List<String> components, List<String> pluginData)
886 : super(index, timeStamp, entryKind, components); 915 : super(index, timeStamp, entryKind, components, pluginData);
887 } 916 }
888 917
889 /** 918 /**
890 * A log entry representing an PluginEx entry. 919 * A log entry representing an PluginEx entry.
891 */ 920 */
892 class PluginExceptionEntry extends GenericEntry with PluginEntryMixin { 921 class PluginExceptionEntry extends GenericPluginEntry {
893 /**
894 * The id of the plugin that generated the exception.
895 */
896 final String pluginId;
897
898 /** 922 /**
899 * Initialize a newly created log entry. 923 * Initialize a newly created log entry.
900 */ 924 */
901 PluginExceptionEntry(int index, int timeStamp, String entryKind, 925 PluginExceptionEntry(int index, int timeStamp, String entryKind,
902 this.pluginId, List<String> components) 926 List<String> components, List<String> pluginData)
903 : super(index, timeStamp, entryKind, components); 927 : super(index, timeStamp, entryKind, components, pluginData);
904 } 928 }
905 929
906 /** 930 /**
907 * A log entry representing a notification that was sent from a plugin to the 931 * A log entry representing a notification that was sent from a plugin to the
908 * server. 932 * server.
909 */ 933 */
910 class PluginNotificationEntry extends PluginEntry { 934 class PluginNotificationEntry extends JsonBasedPluginEntry {
911 /** 935 /**
912 * Initialize a newly created notification to have the given [timeStamp] and 936 * Initialize a newly created notification to have the given [timeStamp] and
913 * [notificationData]. 937 * [notificationData].
914 */ 938 */
915 PluginNotificationEntry( 939 PluginNotificationEntry(
916 int index, int timeStamp, String pluginId, Map notificationData) 940 int index, int timeStamp, Map notificationData, List<String> pluginData)
917 : super(index, timeStamp, pluginId, notificationData); 941 : super(index, timeStamp, notificationData, pluginData);
918 942
919 /** 943 /**
920 * Return the event field of the notification. 944 * Return the event field of the notification.
921 */ 945 */
922 String get event => data['event']; 946 String get event => data['event'];
923 947
924 @override 948 @override
925 String get kind => 'PluginNoti'; 949 String get kind => 'PluginNoti';
926 950
927 /** 951 /**
928 * Return the value of the parameter with the given [parameterName], or `null` 952 * Return the value of the parameter with the given [parameterName], or `null`
929 * if there is no such parameter. 953 * if there is no such parameter.
930 */ 954 */
931 dynamic param(String parameterName) { 955 dynamic param(String parameterName) {
932 var parameters = data['params']; 956 var parameters = data['params'];
933 if (parameters is Map) { 957 if (parameters is Map) {
934 return parameters[parameterName]; 958 return parameters[parameterName];
935 } 959 }
936 return null; 960 return null;
937 } 961 }
938 } 962 }
939 963
940 /** 964 /**
941 * A log entry representing a request that was sent from the server to a plugin. 965 * A log entry representing a request that was sent from the server to a plugin.
942 */ 966 */
943 class PluginRequestEntry extends PluginEntry { 967 class PluginRequestEntry extends JsonBasedPluginEntry {
944 /** 968 /**
945 * Initialize a newly created response to have the given [timeStamp] and 969 * Initialize a newly created response to have the given [timeStamp] and
946 * [requestData]. 970 * [requestData].
947 */ 971 */
948 PluginRequestEntry(int index, int timeStamp, String pluginId, Map requestData) 972 PluginRequestEntry(
949 : super(index, timeStamp, pluginId, requestData); 973 int index, int timeStamp, Map requestData, List<String> pluginData)
974 : super(index, timeStamp, requestData, pluginData);
950 975
951 /** 976 /**
952 * Return the id field of the request. 977 * Return the id field of the request.
953 */ 978 */
954 String get id => data['id']; 979 String get id => data['id'];
955 980
956 @override 981 @override
957 String get kind => 'PluginReq'; 982 String get kind => 'PluginReq';
958 983
959 /** 984 /**
(...skipping 11 matching lines...) Expand all
971 return parameters[parameterName]; 996 return parameters[parameterName];
972 } 997 }
973 return null; 998 return null;
974 } 999 }
975 } 1000 }
976 1001
977 /** 1002 /**
978 * A log entry representing a response that was sent from a plugin to the 1003 * A log entry representing a response that was sent from a plugin to the
979 * server. 1004 * server.
980 */ 1005 */
981 class PluginResponseEntry extends PluginEntry { 1006 class PluginResponseEntry extends JsonBasedPluginEntry {
982 /** 1007 /**
983 * Initialize a newly created response to have the given [timeStamp] and 1008 * Initialize a newly created response to have the given [timeStamp] and
984 * [responseData]. 1009 * [responseData].
985 */ 1010 */
986 PluginResponseEntry( 1011 PluginResponseEntry(
987 int index, int timeStamp, String pluginId, Map responseData) 1012 int index, int timeStamp, Map responseData, List<String> pluginData)
988 : super(index, timeStamp, pluginId, responseData); 1013 : super(index, timeStamp, responseData, pluginData);
989 1014
990 /** 1015 /**
991 * Return the id field of the response. 1016 * Return the id field of the response.
992 */ 1017 */
993 String get id => data['id']; 1018 String get id => data['id'];
994 1019
995 @override 1020 @override
996 String get kind => 'PluginRes'; 1021 String get kind => 'PluginRes';
997 1022
998 /** 1023 /**
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 int slash = context.lastIndexOf('/'); 1186 int slash = context.lastIndexOf('/');
1162 if (slash < 0) { 1187 if (slash < 0) {
1163 slash = context.lastIndexOf('\\'); 1188 slash = context.lastIndexOf('\\');
1164 } 1189 }
1165 if (slash >= 0) { 1190 if (slash >= 0) {
1166 String prefix = context.substring(0, slash); 1191 String prefix = context.substring(0, slash);
1167 _target = _target.replaceAll(prefix, '...'); 1192 _target = _target.replaceAll(prefix, '...');
1168 } 1193 }
1169 } 1194 }
1170 } 1195 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/instrumentation/instrumentation.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698