-
Notifications
You must be signed in to change notification settings - Fork 51
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Expose the software service through the HTTP/JSON API #1069
Conversation
* By now it only implements a list of products.
.receive_selected_product_changed() | ||
.await | ||
.then(|change| async move { | ||
if let Ok(id) = change.get().await { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can it happen that change result is not Ok
? And if so, in which case? I would at least document it here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If it fails, it is because it cannot deserialize the information coming from D-Bus. Our proxy could be outdated, for instance. But I do not think we should put a comment about that in each place where we use this function.
See https://docs.rs/zbus/latest/src/zbus/proxy/mod.rs.html#196-200 (because get documentation) is not enough.
In general, any conversion problem is, most probably, because our proxies are outdated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok, so basically internal problem and not user side.
1 => Self::Auto, | ||
_ => Self::None, | ||
0 => Ok(Self::User), | ||
1 => Ok(Self::Auto), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
now, I am confused, why is not there 2 => Ok(Self::None)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because it is not expected to get a 2
from the API (it does not exist).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ah, ok.
Prepare for releasing Agama 8. It includes the following pull requests: * #884 * #886 * #914 * #918 * #956 * #957 * #958 * #959 * #960 * #961 * #962 * #963 * #964 * #965 * #966 * #969 * #970 * #976 * #977 * #978 * #979 * #980 * #981 * #983 * #984 * #985 * #986 * #988 * #991 * #992 * #995 * #996 * #997 * #999 * #1003 * #1004 * #1006 * #1007 * #1008 * #1009 * #1010 * #1011 * #1012 * #1014 * #1015 * #1016 * #1017 * #1020 * #1022 * #1023 * #1024 * #1025 * #1027 * #1028 * #1029 * #1030 * #1031 * #1032 * #1033 * #1034 * #1035 * #1036 * #1038 * #1039 * #1041 * #1042 * #1043 * #1045 * #1046 * #1047 * #1048 * #1052 * #1054 * #1056 * #1057 * #1060 * #1061 * #1062 * #1063 * #1064 * #1066 * #1067 * #1068 * #1069 * #1071 * #1072 * #1073 * #1074 * #1075 * #1079 * #1080 * #1081 * #1082 * #1085 * #1086 * #1087 * #1088 * #1089 * #1090 * #1091 * #1092 * #1093 * #1094 * #1095 * #1096 * #1097 * #1098 * #1099 * #1100 * #1102 * #1103 * #1104 * #1105 * #1106 * #1109 * #1110 * #1111 * #1112 * #1114 * #1116 * #1117 * #1118 * #1119 * #1120 * #1121 * #1122 * #1123 * #1125 * #1126 * #1127 * #1128 * #1129 * #1130 * #1131 * #1132 * #1133 * #1134 * #1135 * #1136 * #1138 * #1139 * #1140 * #1141 * #1142 * #1143 * #1144 * #1145 * #1146 * #1147 * #1148 * #1149 * #1151 * #1152 * #1153 * #1154 * #1155 * #1156 * #1157 * #1158 * #1160 * #1161 * #1162 * #1163 * #1164 * #1165 * #1166 * #1167 * #1168 * #1169 * #1170 * #1171 * #1172 * #1173 * #1174 * #1175 * #1177 * #1178 * #1180 * #1181 * #1182 * #1183 * #1184 * #1185 * #1187 * #1188 * #1189 * #1190 * #1191 * #1192 * #1193 * #1194 * #1195 * #1196 * #1198 * #1199 * #1200 * #1201 * #1203 * #1204 * #1205 * #1206 * #1207 * #1208 * #1209 * #1210 * #1211 * #1212 * #1213 * #1214 * #1215 * #1216 * #1217 * #1219 * #1220 * #1221 * #1222 * #1223 * #1224 * #1225 * #1226 * #1227 * #1229
Trello: https://trello.com/c/2MjaulMd/3566-3-expose-the-software-api-over-http
This PR exposes the public1 part of the software API through the HTTP/JSON interface. It includes:
/software/patterns
: list of patterns, including whether they are selected (and by whom)./software/products
: list of products./software/probe
: starts the software probing./software/config
: describing the software configuration.Additionally, it exposes the following events through the websocket:
PatternsChanged
, containing the patterns and who selected them ('user' or 'auto').ProductChanged
, with the name of the new product.Implementation details
In this phase of the development, we are still deciding the best way to implement these HTTP/JSON interfaces. The implementation has two parts:
About the service status, the zbus proxies are cached and can be cloned, so it looks like a good idea to keep our clients as part of the state.
In the future
There are a few improvements we could consider in the future:
SoftwareEvent
,ManagerEvent
), so those services only know about their types.Error::Software(SoftwareError)
,Error::Manager(ManagerError)
, etc.) to have a singleIntoResponse
implementation while keeping modules isolation.Footnotes
The part of the D-Bus API that it is used by the web UI. ↩